找前5个默尼森数。P是素数且M也是素数,并且满足等式M=2**P-1,则称M为默尼森数。例如,P=5,M=2**P-1=31,5和31都是素数,因此31是默尼森数。
3 回答
已采纳
清波
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))
修改了 log , Python2 实测可用。
再次修改,优化 get_monisen() 函数, 总算能算到8了。。
慕粉3212516
TA贡献2条经验 获得超0个赞
def isprime(num):#判断素数的函数 count = num-1 while count>1: if num%count==0 : return(False) else: count-=1 if count==1: return (True) #开始判断 p=2 pnlist=[] #存放默尼森数 while len(pnlist)<5: #只要5 个,如果要多个,更改 if isprime(p): pn=2**p-1 if isprime(pn): pnlist.append(pn) p+=1 print pnlist
添加回答
举报
0/150
提交
取消