問題描述:
法國數學家梅森尼對這類形如2^n-1的素數特別感興趣,做過很多有意義的工作,後人把此類數命名為梅森尼數。
已經證明了,如果2^n-1是素數,則冪指數n必須是素數,然而,反過來並不對,當n是素數時,2^n-1不一定是素數。例如,人們已經找出2^11-1是乙個合數,23可以除盡它,2^23-1是乙個合數,47可以除盡它。
程式設計找出指數n在(2,50)中的梅森尼數。
我的**:import math
def prime(m):
count=0
for i in range(2,int(math.sqrt(m))+1):
if m%i==0:
count=1
if count==0:
return true
else:
return false
for j in range(2,50):
if prime(2**j-1) and prime(j):
print j,2**j-1
結果:冪 梅森尼數
2 3
3 7
5 31
7 127
13 8191
17 131071
19 524287
31 2147483647
我的思路:
過程很簡單,就是定義乙個函式用來判斷傳入的引數是否為素數,然後遍歷2到50之間的數,輸出同時滿足指數是素數,對應的2^n-1也是素數的數即可;
示例**:import math
def isprimenumber(num):
i = 2
x = math.sqrt(num)
while i <= x:
if num%i == 0:
return false
i += 1
return true
def masonnumber(num):
arr =
for i in xrange(2, num + 1):
if isprimenumber(i) and isprimenumber(2**i - 1):
return arr
print masonnumber(50)
2 4演算法 列舉 梅森數
形如2n 1的素數稱為梅森數 mersenne number 例如2 2 2 3 1 7都是梅森數。1722年,雙目失明的瑞士數學大師尤拉證明了2 31 1 2147483647是乙個素數,堪稱當時世界上 已知最大素數 的乙個記錄。本題要求編寫程式,對任一正整數n n 20 輸出所有不超過2 n 1...
實驗4 2 9 梅森數 20分
形如2 n 1的素數稱為梅森數 mersenne number 例如2 2 1 3 2 3 1 7都是梅森數。1722年,雙目失明的瑞士數學大師尤拉證明了2 31 1 2147483647是乙個素數,堪稱當時世界上 已知最大素數 的乙個記錄。本題要求編寫程式,對任一正整數n n 20 輸出所有不超過...
實驗4 2 9 梅森數 20分
形如2n 1的素數稱為梅森數 mersenne number 例如22 1 3 23 1 7都是梅森數。1722年,雙目失明的瑞士數學大師尤拉證明了231 1 2147483647是乙個素數,堪稱當時世界上 已知最大素數 的乙個記錄。本題要求編寫程式,對任一正整數n n 20 輸出所有不超過2n 1...