清波
从另外一个问题中 搬来 素数判断:import math
## 定义 素数 判断函数
def isprime(n):
if n!=int(n) or n<2: ## 此处稍作改进
return False
for i in range(2,int(math.sqrt(n)+1)):
if n % i ==0:
return False
return True
## 定义 默尼森数 判断函数
def ismonisen(n):
if isprime(math.log(n+1,2)) and isprime(n):
return True
return False
## 至此,准备工作完毕, 也定义一个获取 默尼森数的函数吧,这次传进去 个整数,返回该数量的 默尼森数 列表:
def get_monisen(n):
if n!= int(n) or n<1:
return []
x=3
result=[3]
while True:
if isprime(x) and isprime(2**x-1):
result.append(2**x-1)
if len(result)==n:
return result
x+=2
## 测试:
print (get_monisen(8))
[3, 7, 31, 127, 8191, 131071, 524287, 2147483647]算是写完了,做了一些无谓的判断, 习惯使然。 结果题主验证下,如果不对的话,我可以接着修改。。再次修改, 优化get_monisen(), 可以算到8了。。