Python練習(13)易
阿新 • • 發佈:2018-11-11
問題描述
法國數學家梅森尼對這類形如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]