为了账号安全,请及时绑定邮箱和手机立即绑定

求大神用Python2编写一个找前5个默尼森数的程序!

求大神用Python2编写一个找前5个默尼森数的程序!

yuantongxin 2016-04-21 13:05:12
找前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了。。

查看完整回答
反对 回复 2016-04-21
?
慕粉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


查看完整回答
反对 回复 2016-04-24
?
yuantongxin

TA贡献10条经验 获得超5个赞

这五个数应为:3 7 31 127 8191

查看完整回答
反对 回复 2016-04-21
  • 3 回答
  • 2 关注
  • 4157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信