1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

素数一般項による素数の生成 Python3

Last updated at Posted at 2023-01-06

素数の一般項という数式を見つけたので、python3 で、mpmathモジュールを使って、任意精度演算で素数を求めるプログラムを書いてみました。
但し、一回の演算の回数が多すぎるため、小さい素数(29とか)でも、遅くて、使い物にはなりません。
chmod +x prime.pyとして、実行権限を付けて動かして下さい。
Usage: prime.py

素数の一般項

説明などが欲しい方は、googleで、「素数 一般項」等として検索して下さい。

実行

mpmathモジュール は、
$ python3 -m pip install mpmathとしてインストールして下さい。

ここでは、演算精度は200にしてあります。

プログラム1

prime.py
#!/usr/bin/python3
import mpmath
import sys
argv=sys.argv
n=int(argv[1])
mpmath.mp.dps = 200

s1=1
for m in range(1,int(mpmath.power(2,n)+1)):

 s2=0
 for k in range(1,m+1):
   s2+=mpmath.floor(mpmath.power(mpmath.cos((mpmath.factorial(k-1)+1)/k*mpmath.pi),2))

 s1=s1+mpmath.floor(mpmath.power(n/s2,1/n))
print(int(s1))

プログラム2

こちらは、同じアルゴリズムで、次々と素数を表示していきます。

prime4.py
#!/usr/bin/python3
import mpmath
import sys
argv=sys.argv
mpmath.mp.dps = 200

def nthprime(n):
  s1=1
  for m in range(1,int(mpmath.power(2,n)+1)):
    s2=0
    for k in range(1,m+1):
      s2+=mpmath.floor(mpmath.power(mpmath.cos((mpmath.factorial(k-1)+1)/k*mpmath.pi),2))
    s1=s1+mpmath.floor(mpmath.power(n/s2,1/n))
  return(s1)

for i in range(1,100):
  print(int(nthprime(i)))
1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?