メルセンヌ素数をPythonで計算する
2のk乗で表すことができる数をメルセンヌ数といいます。ここでは、メルセンヌ数をリストに収めます。ここでは50億までのメルセンヌ数をもとめます。
kが素数の場合にはメルセンヌ数は素数になりますが、その逆は成り立ちません。例えばk=11,23,39などのときには、メルセンヌ数は素数になりません。
import sympy
k=1
temp=0
mersenn=[]
while temp<5000000000:
temp=2**k-1
mersenn.append(temp)
k+=1
mersenn_p={}
mersenn_c={}
for cnt,i in enumerate(mer):
if sympy.isprime(i):
mersenn_p[cnt+1]=i
else:
mersenn_c[cnt+1]=i
print(mersenn _p)
print(mersenn _c)
答えは以下の通りです。
{2: 3, 3: 7, 5: 31, 7: 127, 13: 8191, 17: 131071, 19: 524287, 31: 2147483647}
{1: 1, 4: 15, 6: 63, 8: 255, 9: 511, 10: 1023, 11: 2047, 12: 4095, 14: 16383, 15: 32767, 16: 65535, 18: 262143, 20: 1048575, 21: 2097151, 22: 4194303, 23: 8388607, 24: 16777215, 25: 33554431, 26: 67108863, 27: 134217727, 28: 268435455, 29: 536870911, 30: 1073741823, 32: 4294967295, 33: 8589934591}
メルセンヌ数が素数の時には、その順序も素数になります。ただし、メルセンヌ素数でないものでも順番が素数のものが見られます。具体的にはk=11,23,39のときです。
この記事が気に入ったらサポートをしてみませんか?