Python实现查找第n个默尼森数的算法详解

宋时安
宋时安
发布时间:2026-10-13| 4人浏览过
原创

本文介绍如何使用Python查找第n个默尼森数。默尼森数定义为满足M=2^P-1且P和M均为素数的数。文章详细解析了素数检测算法,通过遍历从2到平方根的因子来判断质数,并结合循环计算M值,筛选出符合条件的默尼森数及其对应的素数P,最终输出指定序号的结果。

默尼森数的定义与示例

这是一个经典的程序设计挑战:寻找第n个默尼森数。若存在素数P和M,且满足等式M=2^P-1,则M被称为默尼森数。例如,当P=5时,计算M=2^5-1=31。由于5和31均为素数,因此31是一个默尼森数(它是第3个默尼森数)。

程序功能模块设计

该程序的设计主要包含两个核心部分:首先是实现素数判断功能,其次是编写逻辑以输出第n个默尼森数。

素数检测与循环算法逻辑

在素数判断方面,依据定义,只需检测从2到该数平方根之间是否存在因子;若存在因子,则不是素数。在获取默尼森数方面,通过循环计算M=2^P-1的值,并调用上述素数判断函数进行验证,从而完成目标。

Python代码实现


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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。