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了。。