寻找第n个默尼森数。
代码格式如下:
def prime(num):
…
def monisen(no):
… …
return xxx
print(monisen(int(input()))) # 此处输入由系统自动完成不需要自己输入,只要写这样一条语句即可(3分)
题目内容:
找第n个默尼森数。P是素数且M也是素数,并且满足等式M=2P-1,则称M为默尼森数。例如,P=5,M=2P-1=31,5和31都是素数,因此31是默尼森数。
输入格式:
按提示用input()函数输入
输出格式:
int类型
输入样例:
4
输出样例:
127
时间限制:1000ms内存限制:32000kb
思路
首先先写函数判断是否为素数 ,然后利用列表来存储数据 为了保证第i个下标记对应第 i个莫尼森数 首先对列表第零项添加0元素。 cnt 用来对计数第cnt个莫尼森数 num用来表示题意中的P,当P为素数的时候再对
M
=
2
P
−
1
M=2^{P}-1
M=2P−1
进行判断 若此数也为素数说明这是莫尼森数 加入列表即可 并且更新cnt的值,无论temp是否符合 都要将num加一
import math
def isPrime(n):
for i in range(2,n):
if(n%i == 0):
return 0
return 1
def monisen(no):
cnt = 0
num = 2 #第一个素数为2
a = []
a.append(0)
while cnt != no: #从第0个莫尼森数开始,寻找第no个莫尼森数
if isPrime(num)==1:
temp = 2**num-1
if isPrime(temp) == 1:
a.append(temp)
cnt+=1
num+=1
return a[no]
print(monisen(int(input())))