什么是梅森素数?
先说梅森数,梅森数(Mersenne Prime)指的是形如2n-1的正整数,其中指数n是素数,记为Mn。
如果一个梅森数是素数,则称其为梅森素数。例如2^2-1=3,2^3-1=7都是梅森素数。
1722年,瑞士数学大师欧拉证明了2^31-1=2147483647是一个素数,它共有10位数,成为当时世界上已知的最大素数。
迄今为止,人们仅发现了47个梅森素数。梅森素数历来都是数论研究中的一项重要内容,也是当今科学探索中的热点和难点问题。
那么问题来了,求出指数n<50的所有梅森素数。
下面直接上代码:
########################
import math
def sushu(n):# 判断n是否为素数
k = math.sqrt(n) + 1
i = 2
while i <= k:
if n % i == 0:
return 0 # n能被j整除,不是素数,返回0
i += 1
return 1 # n是素数,返回1
if __name__=="__main__":
n = 0
print("梅森素数:")
for i in range(2, 50):
p = (2 ** i) - 1 # 求梅森数
if sushu(p): # 判断p是否为梅森素数
n += 1
print("M(%d) = %d" %(i, p)) # 若当前p为梅森素数,则打印,i为指数
print("2的指数n<50的所有梅森素数有:%d个" %n)
########################
执行结果如下:
梅森素数:
M(2) = 3
M(3) = 7
M(5) = 31
M(7) = 127
M(13) = 8191
M(17) = 131071
M(19) = 524287
M(31) = 2147483647
2的指数n<50的所有梅森素数有:8个
________________END______________
网友评论