SymPyモジュールのprime関数の不思議
素数を小さい順にひたすら並べたデータを作成し次のページで公開しています。
自作のプログラムでデータをつくり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万番目もすぐに結果が返るので数字が大きすぎるということではありません。むしろ、何故、この速さで計算されるのが不思議でなりません。いったいどのようなロジックで計算しているのか、探ってみたくなります。