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
添加回答
舉報