import?math
??
??
##?定義?素數(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)備工作完畢,?也定義一個獲取?默尼森數(shù)的函數(shù)吧,這次傳進(jìn)去?個整數(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
?????
?
##?測試:
print?(get_monisen(8))
修改了 log , Python2 實測可用。
再次修改,優(yōu)化 get_monisen() 函數(shù), 總算能算到8了。。