Help us understand the problem. What is going on with this article?

プログラミング問題集(問11〜問15)

問11:区分求積法(長方形近似)

積分を数値的に求める区分求積法として、長方形近似、台形則、シンプソン則などがある。そのうち長方形近似では、ある点 $x_i$ における値 $f(x_i)$ に幅 $h$ をかけた長方形を足し合わせたものを積分値として近似する。

定積分

長方形近似を用いて、上の式を数値的に解け。

解答例

問12:区分求積法(台形則)

積分を数値的に求める区分求積法として、長方形近似、台形則、シンプソン則などがある。そのうち台形則では、ある点 $x_i$ とその前の点 $x_{i-1}$ における、$f(x_i)$ と $f(x_{i-1})$ による幅 $h$ の台形を足し合わせたものを積分値として近似する。

定積分

台形則を用いて、上の式を数値的に解け。

解答例

問13:区分求積法(シンプソン則)

積分を数値的に求める区分求積法として、長方形近似、台形則、シンプソン則などがある。そのうちシンプソン則では、ある点 $x_i$ とその前の点 $x_{i-1}$、後の点 $x_{i+1}$ を通る二次関数を導出し、その$f(x_{i-1})$ から $f(x_{i+1})$ までの積分値$h(f(x_{i+1})+4f(x_i)+f(x_{i-1}))/3$ を足し合わせたものを積分値として近似する。

定積分

シンプソン則を用いて、上の式を数値的に解け。

解答例

問14:エラトステネスの篩

整数 $n$ を入力すると、 $n$ 以下の素数の個数を返す関数を作りなさい。またそのアルゴリズムを説明しなさい。

ただし、

  • 1 ≤ $n$ ≤ 106

とする。

例14-1

n = 10
4

例14-2

n = 100
25

例14-3

n = 1000
168

例14-4

n = 10000
1229

例14-5

n = 100000
9592

解答例

問15:格子点の個数

ユークリッド平面状に2つの格子点 $P = (x_1, y_1)$, $Q = (x_2, y_2)$ がある。線分 $PQ$ 上には、$P$, $Q$ 以外にいくつの格子点が存在するか計算する関数を作りなさい。またそのアルゴリズムを説明しなさい。

ただし、

  • -106 ≤ $x_1$ ≤ 106
  • -106 ≤ $x_2$ ≤ 106
  • -106 ≤ $y_1$ ≤ 106
  • -106 ≤ $y_2$ ≤ 106

とする。

【ヒント】 最大公約数を求める問題に帰着できます。「ユークリッドの互除法」で効率的に解けます。

例15-1

x1 =  -2
y1 =  -9
x2 =  6
y2 =  7
7
# 図示して確認
%matplotlib inline
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot([x1, x2], [y1, y2])
ax.set_xticks(range(x1, x2 + 1, 1))
ax.set_yticks(range(y1, y2 + 1, 1))
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.grid()

9-1.png

例15-2

x1 =  -42
y1 =  -65
x2 =  62
y2 =  -91
25

例15-3

x1 =  908
y1 =  -307
x2 =  -86
y2 =  -679
0

例15-4

x1 =  -6326
y1 =  3211
x2 =  7048
y2 =  5822
0

例15-5

x1 =  -9675
y1 =  -2803
x2 =  3828
y2 =  -6349
2

参考:例の作り方

import random
x1 = random.randint(-1000000, 1000000)
y1 = random.randint(-1000000, 1000000)
x2 = random.randint(-1000000, 1000000)
y2 = random.randint(-1000000, 1000000)

print("x1 = ", x1)
print("y1 = ", y1)
print("x2 = ", x2)
print("y2 = ", y2)

解答例

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away