5 回答

TA貢獻(xiàn)165條經(jīng)驗(yàn) 獲得超90個(gè)贊
從另外一個(gè)問題中 搬來 素?cái)?shù)判斷:
import?math ?? ?? ##?定義?素?cái)?shù)?判斷函數(shù) def?isprime(n): ????if?n!=int(n)?or?n<2:??##?此處稍作改進(jìn) ????????return?False ????for?i?in?range(2,int(math.sqrt(n)+1)): ????????if?n?%?i?==0: ????????????return?False ????return?True ????? ????? ##?定義?默尼森數(shù)?判斷函數(shù) def?ismonisen(n): ????if?isprime(math.log(n+1,2))?and?isprime(n): ????????return?True ????return?False ????? ? ##?至此,準(zhǔn)備工作完畢,?也定義一個(gè)獲取?默尼森數(shù)的函數(shù)吧,這次傳進(jìn)去?個(gè)整數(shù),返回該數(shù)量的?默尼森數(shù)?列表: 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 ????? ? ##?測(cè)試: print?(get_monisen(8)) [3,?7,?31,?127,?8191,?131071,?524287,?2147483647]
算是寫完了,做了一些無謂的判斷, 習(xí)慣使然。 ?結(jié)果題主驗(yàn)證下,如果不對(duì)的話,我可以接著修改。。
再次修改, 優(yōu)化get_monisen(), 可以算到8了。。

TA貢獻(xiàn)5條經(jīng)驗(yàn) 獲得超1個(gè)贊
寫了一個(gè),但不是很簡(jiǎn)便,如果有更好的方式,請(qǐng)告訴一下,謝謝。
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)
抱歉,以上代碼修改了一下,請(qǐng)?jiān)僭囈幌?/p>

TA貢獻(xiàn)1條經(jīng)驗(yàn) 獲得超0個(gè)贊
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個(gè)默尼森數(shù)的程序,鍵入8,結(jié)果為:[3,?7,?31,?127,?8191,?131071,?524287,?2147483647]

TA貢獻(xiàn)1條經(jīng)驗(yàn) 獲得超0個(gè)贊
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 ? ?
___________________________________________________________________
調(diào)用:
>>> monisen()
P M
2 3
3 7
5 31
7 127
13 8191

TA貢獻(xiàn)1條經(jīng)驗(yàn) 獲得超0個(gè)贊
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
添加回答
舉報(bào)