nまでの素数を求める
素数とは
1より大きい自然数で1と自分自身以外に約数を持たない数。英語でPrime Number。
エラトステネスのふるい手順
- 2~nまでの整数を順番に書き出す。
- 書き出した数値の中から一番小さい数値を素数pとする。
(既に素数として選ばれた数値、ふるい落とされた数値は除く) - 素数pを除くpの倍数を全て消去する(ふるい落とす)。
- 手順2~3を素数pが\(\sqrt{n}\)を超えるまで繰り返す。残った数値がnまでの素数となる。
Pythonでエラトステネスのふるい
記載の手順にそって冗長的に書いたコードです。ふるい処理の途中経過を出力しています。
# nまでの素数(エラトステネスのふるい)
n = 100
A = list(range(2, n+1)) # 2~nまでの素数候補の集合リスト
sqrt_n = n ** (1 / 2) # √n
print('素数候補')
print(A)
idx = 0
while True:
p = A[idx] # リストidx番目の素数p
if p > sqrt_n: break # 素数pが√nを超えたら、ふるい終了
print('p={}の倍数をふるい落とす'.format(p))
check_numbers = A[idx+1:] # 素数を除くふるい対象
for check_number in check_numbers:
if check_number % p == 0: # 素数pの倍数を集合リストから削除
A.remove(check_number)
print(A)
idx += 1
print('{0}までの素数 計{1}個'.format(n, len(A)))
print(A)
0 件のコメント :
コメントを投稿