python学习笔记 寻找第N个莫尼森数

寻找第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=2P1
进行判断 若此数也为素数说明这是莫尼森数 加入列表即可 并且更新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())))


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值