问题描述
法国数学家梅森尼对这类形如2 ^ n-1的素数特别感兴趣,做过很多有意义的工作,后人把此类数命名为梅森尼数。 已经证明了,如果2 ^ n-1是素数,则幂指数n必须是素数,然而,反过来并不对,当n是素数时,2 ^ n-1不一定是素数。例如,人们已经找出2 ^ 11-1是一个合数,23可以除尽它,2 ^ 23-1是一个合数,47可以除尽它。
找出指数n在(2,50)中的梅森尼数。
分析
- 首先构造素数判断函数
遍历范围内的数,找出素数n
判断2^n-1 是否是素数,若是,则输出该数
代码
import math
def sushu(n):
for k in range(2,int(math.sqrt(n)+1)):
if n%k==0:
return False
return True
def masonNumber(n):
b=[]
for i in range(2,n):
if sushu(i): #两个判断可以合并: if sushu(i) and sushu(2**i-1):
if sushu(2**i-1):
b.append(2**i-1)
return b
print masonNumber(50)
#结果
[3, 7, 31, 127, 8191, 131071, 524287, 2147483647L]