見出し画像

Pythonで区間ごとの素数の数を数える

素数の数がいくつあるかというのは、興味深いものです。そこで区間ごとにいくつ素数が分布しているかを調べるプログラムをつくります。

詳しくは、Pythonで素数の計算をする、をご参照ください。

10000までの素数を収めるリストの作成

import sympy
prime_l=list(sympy.primerange(2,10000))
print(prime_l)
print(len(prime_l))

defaultdictを使いリストから1000毎に素数を集計

import collections
d=len(str(max(prime_l)))
p_dict=collections.defaultdict(int)
interval=1000
for i in prime_l:
   temp=int((i-1e-6)//interval)*interval
   cls=f'{str(temp+1):>{d}}'+'-'+f'{str(temp+interval):>{d+2}}'
   p_dict[cls]+=1

   p_dict_s=dict(sorted(p_dict.items(), key=lambda x:x[0]))
p_dict_s    

{' 1- 1000': 168,
'1001- 2000': 135,
'2001- 3000': 127,
'3001- 4000': 120,
'4001- 5000': 119,
'5001- 6000': 114,
'6001- 7000': 117,
'7001- 8000': 107,
'8001- 9000': 110,
'9001- 10000': 112}

値が大きくなるにしたがって、少しずつ減っていくことがわかります。最後にsympyモジュールで結果を確認します。

import sympy
total=0
for i in range(10):
   cnt=len(list(sympy.primerange(i*1000+1,(i+1)*1000+1)))
   print(cnt)
   total+=cnt
   
print(total)    

168
135
127
120
119
114
117
107
110
112
1229
正しく計算されていることがわかりました。

この記事が気に入ったらサポートをしてみませんか?