-
清波
从另外一个问题中 搬来 素数判断: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了。。
-
再见你
写了一个,但不是很简便,如果有更好的方式,请告诉一下,谢谢。import math
a=0
b=1
L=[]
def sushu(b):
for x in range(1,int(math.sqrt(b)+1)):
if x!=1 and b%x==0:
return False
return True
while True:
if(a==5):
break
if sushu(b):
c=2**b-1
if sushu(c) and b!=c:
L.append(c)
a=a+1
b=b+1
print (L)抱歉,以上代码修改了一下,请再试一下
-
vero爱慕课
import mathdef prime(num): if num != int(num) or num < 2: return 0 max = int(math.sqrt(num)) for i in range(2,max+1): if num % i == 0: return 0 return 1def monisen(no): i = 0 p = 1 x = [] while True: if prime(p): if prime(2**p-1): m = 2**p-1 x.append(m) i += 1 if i == no: return x else: p += 1 else: p += 1 else: p += 1 print(monisen(int(input())))寻找前n个默尼森数的程序,键入8,结果为:[3, 7, 31, 127, 8191, 131071, 524287, 2147483647]
-
qq_满儿燕_04214753
from math import sqrtdef isprime(x): if x==1: return False k=int(sqrt(x)) for j in range(2,k+1): if x%j==0: return False return True__________________________________________________________________def monisen(): sum=0 P=2 print 'P M' while True: if isprime(P): M=2**P-1 if isprime(M): print P,M sum+=1 if sum==5: break P+=1 ___________________________________________________________________调用:>>> monisen()P M2 33 75 317 12713 8191
-
UPC周伟伟
import math
def isPrime(n):
'judge a number is a prime'
if n==1:
return False
k=int(math.sqrt(n))
for i in range(2,k+1):
if n%i==0:
return False
break
return True
def getMonisen():
count=0
list=[]
P=2
while True:
if isPrime(P):
M=2**P-1
if isPrime(M):
list.append(M)
count+=1
if count==5:
break
P+=1
return list
list=getMonisen()
print list