1. 程式人生 > >Python練習(13)易

Python練習(13)易

問題描述

法國數學家梅森尼對這類形如2 ^ n-1的素數特別感興趣,做過很多有意義的工作,後人把此類數命名為梅森尼數。 已經證明了,如果2 ^ n-1是素數,則冪指數n必須是素數,然而,反過來並不對,當n是素數時,2 ^ n-1不一定是素數。例如,人們已經找出2 ^ 11-1是一個合數,23可以除盡它,2 ^ 23-1是一個合數,47可以除盡它。
找出指數n在(2,50)中的梅森尼數。

分析

  • 首先構造素數判斷函式
    遍歷範圍內的數,找出素數n
    判斷2^n-1 是否是素數,若是,則輸出該數

程式碼

import math
def sushu(n):             
    for k in range(2,int(math.sqrt(n)+1)):
        if n%k==0:
            return False
    return True

def masonNumber(n):
    b=[]
    for i in range(2,n):
        if sushu(i):    #兩個判斷可以合併: if sushu(i) and sushu(2**i-1):
            if sushu(2**i-1):
                b.append(2**i-1)
    return b
print masonNumber(50)

#結果
[3, 7, 31, 127, 8191, 131071, 524287, 2147483647L]