经典程序设计问题:找第n个默尼森数。P是素数且M也是素数,并且满足等式M=2P-1,则称M为默尼森数。例如,P=5,M=2P-1=31,5和31都是素数,因此31是默尼森数。(31是第3个默尼森数)
该程序的功能可以分为两部分设计:一是判断是否为素数,二是输出第n个Monisen数。
对于一来说,根据素数概念,只需要检测从2到其平方根是否有因子,若有则不为素数。对于二来说,循环计算M=2p-1并调用一的函数即可完成
from math import sqrt,pow
def prime(num):
"""检测num是不是质数"""
k = sqrt(num)
for i in range(2,int(k+1)):
if num % i == 0:
return False
return True
def monisen(no):
"""找出第no个莫尼森数"""
n = 0
num = 2
while n < no:
m = pow(2,num) - 1
if prime(num) == True and prime(m) == True:
# 只有num和m都为质数时,n才会加一,即n是莫尼森数的序号
n += 1
num += 1
return int(m),num-1
# 输出前五个莫尼森数M 以及对应的质数P
for i in range(1,6):
print(monisen(i))
到此这篇关于python输出第n个默尼森数的实现示例的文章就介绍到这了,更多相关python 输出默尼森数内容请搜索python博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持python博客!
Powered By python教程网 鲁ICP备18013710号
python博客 - 小白学python最友好的网站!