5 回答
TA贡献165条经验 获得超90个赞
从另外一个问题中 搬来 素数判断:
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了。。
TA贡献5条经验 获得超1个赞
写了一个,但不是很简便,如果有更好的方式,请告诉一下,谢谢。
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)
抱歉,以上代码修改了一下,请再试一下
TA贡献1条经验 获得超0个赞
import math
def 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 1
def 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]
TA贡献1条经验 获得超0个赞
from math import sqrt
def 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 M
2 3
3 7
5 31
7 127
13 8191
TA贡献1条经验 获得超0个赞
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
添加回答
举报