見出し画像

メルセンヌ素数を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のときです。



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