猿问

求大神用Python,找前5个默尼森数!

找前5个默尼森数。P是素数且M也是素数,并且满足等式M=2**P-1,则称M为默尼森数。例如,P=5,M=2**P-1=31,5和31都是素数,因此31是默尼森数。

yuantongxin
浏览 11936回答 5
5回答

清波

从另外一个问题中 搬来 素数判断: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
随时随地看视频慕课网APP

相关分类

Python
我要回答