見出し画像

SymPyモジュールのprime関数の不思議

素数を小さい順にひたすら並べたデータを作成し次のページで公開しています。

素数一覧1~50,000,000

自作のプログラムでデータをつくりPythonのSymPyモジュールを使ってデータをチェックし、間違いのないものにしたいと思っています。その中でなぜかある特定のところでチェックが止まってしまいます。いろいろ調べてみたら不思議なことが起こりました。

SymPyにはprime関数というありがたい機能があり、小さい順にn番目の素数を返してくれます。ところが、なぜか27000000(2700万)番目を求めようとすると答えがいつまでたっても返ってきません。

import sympy 
sympy.prime(27000000)

ちなみに、似たような引数の場合には問題なく計算されます。

print(sympy.prime(27000001))
print(sympy.prime(26000099))
print(sympy.prime(270000000))

#512927377
#492878713
#5785258351

1桁上の2億7000万番目もすぐに結果が返るので数字が大きすぎるということではありません。むしろ、何故、この速さで計算されるのが不思議でなりません。いったいどのようなロジックで計算しているのか、探ってみたくなります。


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