python之寻找第n个默尼森数

1.贴题

题目来自MOOC
《用Python玩转数据》(南京大学)
第二周编程作业


寻找第n个默尼森数。
代码格式如下:
def prime(num):

def monisen(no):
… …
return xxx

print(monisen(int(input()))) #此处不需要自己输入,只要写这样一条语句即可,主要完成monisen()函数(4分)
经典程序设计问题:找第n个默尼森数。P是素数且M也是素数,并且满足等式M=2**P-1,则称M为默尼森数。例如,P=5,M=2**P-1=31,5和31都是素数,因此31是默尼森数。
输入格式:按提示用input()函数输入
输出格式:int类型
输入样例:4
输出样例:127

时间限制:500ms内存限制:32000kb


2.说明

题目还给出了格式,降低了难度。主要思路是通过定义两个函数,其中第一个函数用来判断是不是素数,第二个函数用来判断是不是默尼森数并控制输出第几个默尼森数。

首先是判断是不是素数的函数,这个函数也是初学者必然要进行练手的。思路为从2开始(因为判断能不能被1整除没有意义)到它本身减一,是否没有数可以被整除,如果没有的话就是素数,否则不是。而通过数学知识可以知道上界可以降低到它本身的平方根,因为如果一个数如果可以分解为两个数的因子,那么它的因子的小的那一个一定会小于或等于它的平方根。因为一个数的平方根可以不是整数,所以一般的做法是将平方根取整数部分然后加一作为上界。

判断是不是默尼森数在本次代码中使用了逐个加一的方式,属于笨办法。

3.参考代码

import math #要用到平方根的函数,所以要导入math库
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值