[.py]寻找第n个默尼森数(初级版)

本文介绍了如何使用Python解决寻找第n个默尼森数的问题,包括问题分析、程序设计思路和代码实现。通过判断素数和默尼森数,给出了一种自底向上的解决方案,特别讨论了程序细节和可能的优化方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经典程序设计问题:找第n个默尼森数。

P是素数且M也是素数,并且满足等式M=2^P-1,则称M为默尼森(monisen)数。

例如,P=5,M=2**P-1=31,5和31都是素数,因此31是默尼森数。

本题要求input一个值k(k<9),输出第k个默尼森数

输入样例:4

输出样例:127

 

 

问题分析

按照自底向上的编程思想,要实现问题,则需要有以下几个部分:
判断一个数x是否为素数;
已知x为素数时,判断2^x-1是否为素数;
已知2^x-1是素数,则可知它是默尼森数,要知道它是第几个默尼森数;

 

其实为了简化问题,把k设置成了只计算前8个monisen数,因为实际上第8个monisen数是2^32-1,是signed int型数的可表示的最大值,写好了程序如果要计算更大的数,需要换用其它的数据格式,所以这里为了仅强调计算方法而不考虑更大的monisen数。

 

可以先试一下简单的情况:素数数列前几项k=[2,3,5,7,11,13,...],对应的2^k-1值是[3,7,31,127,2047,8191,...],其中前4项[3,7,31,127]都是默尼森数,而2047,8191不是质数,就不是默尼森数。

 

所以可以这样设计:

 

程序描述:

#输出第num个默尼森数
monisen(num):
若num<1,应报告ERROR
k=0
i=1
while(k<num):
t是第i个素数
i+=1
如果,2^t-1也是素数,则:
计数器k+=1;

跳出while循环时,k=num,直接输出2^t-1的值,即为第num个monisen数

 

 </

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值