首先,先讲个小故事。
  1903年10月,科尔(Cole)在纽约参加美国数学(AMS)的一个会议,议程里有他的一篇题目平淡的论文:“关于一个大数的分解”。大会主席请他宣读论文时,一向寡言的科尔走上黑板,一言不发,拿起粉笔就开始算2的67次方。然后,他小心地减去1.接着,还是不说一个字,他移到黑板的空白处,老老实实地计算

193707721×761838257287193707721×761838257287

193707721\times761838257287两个计算结果一致……美国数学会的听众们破天荒地第一次也是唯一一次为他们听到的报告热烈鼓掌欢呼。科尔还是一言不发,回到自己的位置。也没人向他提任何问题。
  几年过后,1911年,贝尔(E.T.Bell)问科尔用了多长时间来分解M67(Mersenne素数)。科尔回答:“三年里的星期天。”


  在初等数论中,我们可以利用连分数分解法来寻找大整数的因子,具体的算法可以参考《 初等数论及其应用 美第五版》。以下我们给出Python代码:

# -*- coding: utf-8 -*-
from math import sqrt,floor,gcd
#判断是否为平方数
def is_square(n):t = int(sqrt(n))return t*t == n
def main():n = 2**79-1 #要分解的数print('n=%s'%('2**67-1'))seq_P, seq_Q=0, 1a0 = floor(sqrt(n))seq_a= [a0]seq_p = [0,a0]i = 1while True:#P_{k},Q_{k}序列seq_P = seq_a[0]*seq_Q-seq_Pseq_Q = divmod(n-seq_P**2,seq_Q)[0]t = (seq_P+sqrt(n))/seq_Qseq_a[0] = floor(t)#p_{k}序列if i == 1:seq_p.append(a0*seq_a[0]+1)else:seq_p[0] = seq_p[1]seq_p[1] = seq_p[2]seq_p[2] = seq_a[0]*seq_p[1]+seq_p[0]#分解因式if i%2 == 0 and is_square(seq_Q):s = int(sqrt(seq_Q))factor = [gcd(seq_p[1]-s,n),gcd(seq_p[1]+s,n)]if factor[0] != 1 and factor[1] != 1:print('第%d项:%d,%d'%(i,factor[0],factor[1]))print('程序运行完毕!')breakif i%1000 == 0:print('已运行到第%d项'%i)i += 1main()

运行结果如下:

因此,M67有因子193707721和761838257287,因此M67不是梅森素数。



  按照这个思路,我们再给出其他几个非梅森素数的 MkMkM_{k},当然读者也可以自己测试。注意:连分数分解法不一定能找到整数的因子。
  
  
  
  
注意:本人现已开通两个微信公众号: 用Python做数学(微信号为:python_math)以及轻松学会Python爬虫(微信号为:easy_web_scrape), 欢迎大家关注哦~~

连分数分解法寻找整数的因子(Python)相关推荐

  1. 计算机数值方法——LU分解法(C++\Python代码实现)

    算法流程 首先,LU分解法就是在高斯消元法的基础上,把矩阵AAA分解为一个上三角矩阵UUU与一个单位下三角矩阵LLL的乘积. 懒得敲LaTeX公式了,书上由具体的推导过程,这里我们重点介绍代码吧 主要 ...

  2. 解线性方程组的python实现(2)——矩阵三角分解法

    解线性方程组的python实现2--矩阵三角分解法 1. 矩阵三角分解法 实现代码 2. LU分解 2.1 基本步骤 2.2 LU分解的计算公式 2.3 LU分解的结果表示 实现代码 3. 选主元的L ...

  3. Doolittle分解法(LU分解法)的Python实现

    在解一般的非奇异矩阵线性方程组的时候,或者在迭代改善算法中,需要使用LU分解法. 对于一个一般的非奇异矩阵A=(a11, a12,-,a1n,a21,-ann),可分解为一个下三角矩阵L和一个上三角矩 ...

  4. pq分解法潮流计算c语言编程 因子表,PQ分解法潮流计算编程实例.pdf

    PQ分解法潮流计算编程实例.pdf 电力系统分析电力系统分析 Power System AnalysisPower System Analysis PQ分解法编程实例分解法编程实例 通过本讲主要回答如 ...

  5. 信息学奥赛一本通 1171:大整数的因子 | OpenJudge NOI 1.6 13:大整数的因子

    [题目链接] ybt 1171:大整数的因子 OpenJudge NOI 1.6 13:大整数的因子 [题目考点] 1. 高精度 考察:高精模低精 高精度计算讲解 [解题思路] 先把参与运算的数字当成 ...

  6. 鱼刺图战略分解法在绩效管理中的应用

    鱼刺图战略分解法在绩效管理中的应用 一.概述 鱼刺图是由日本管理大师石川馨先生所发展出来的,故又名石川图,如图1所示.鱼刺图战略分解法就是在企业绩效管理方案设计过程中应用鱼刺图工具进行企业战略目标分解 ...

  7. 知识点 - 分拆数/整数拆分

    知识点 - 分拆数/整数拆分 解决问题类型: 将一个数用一个或多个正整数的无序和来表示有几种方案. 这是一个母函数的应用,利用了母函数的指数系数是五边形数来优化复杂度. 结论 (1)称正整数n分解为r ...

  8. Python02 雅克比迭代法 Gauss-Seidel迭代法 列选主元法 LU分解法(附代码)

    1. 实验结果 (1)在定义的矩阵类中设置需要求解的方程为: (2)在 test.py 中选择雅克比迭代法求解: 输入:最大容许迭代次数和精度要求: 输出:根据谱半径判断方法是否收敛,收敛时得到满足精 ...

  9. 高斯若尔当法算法matlab,大规模问题的分解法-D-W分解法

    大规模线性规划问题的求解极具挑战性,在效率.存储和数值稳定性等方面对算法都有很高的要求.但是这类问题常常非常稀疏且有特殊结构,能够分解为若干个较小规模问题求解. 线性规划问题的目标函数和非负约束都可分 ...

最新文章

  1. 在电脑上实现手机app抓包
  2. 分析轮子(二)- ,, (左移、右移、无符号右移)
  3. MVC自定义视图规则
  4. 关于.NET参数传递方式的思考
  5. c++构建工具之shell,configure,make,cmake,scons,xmake简析总结
  6. pycharm导入(import)报红(出现红色波浪线)解决办法(Mark Directory as —— Sources Root)
  7. Lucky 7 in the Pocket
  8. redirect_uri 域名与后配置不一致是什么意思_免费 amp; 无限的域名/企业邮箱
  9. 总结07展望08.愿一切都好.
  10. 04.SpringBoot 自定义配置
  11. C++ 类的静态成员详细讲解(转)
  12. oppok3如何刷机_OPPO K3怎么刷机?
  13. 黑马程序员--Mysql中文乱码解决办法
  14. 如何解决“App开发者需要更新此App以在此iOS版本上正常工作”
  15. PCB拼板邮票孔制作规范!
  16. OJ 1180 找树根和孩子
  17. 正确思维,和非理性自我斗争
  18. ASP.NET网站实现中英文转换(本地化资源)
  19. Aut(S3)=Inn(S3)的证明和元素寻找
  20. 00.Sublime汉化、默认代码块、代码提示教程

热门文章

  1. 《机器学习实战》8.4 线性回归之乐高玩具套件二手交易价格预测
  2. 【目标检测系列】yolov3之损失函数以及边框回归pytorch源码注释以及理论理解
  3. Linux内核机制总结内存管理之每处理器内存分配器(十七)
  4. 04 pandas 分组
  5. 聚焦AI高端人才培养,AICA首席AI架构师培养计划第六期开学
  6. 国内最让人失望的景点有哪些?哪些景点冷门却又十分好玩、值得一去,数据来为你揭晓...
  7. 无人机影像的纹理特征提取【ENVI+Python】--纯操作无原理
  8. ES6、ES7、ES8、ES9、ES10、ES11新增特性一览-介绍
  9. js es10 新特性
  10. srilm的安装与使用(标贝科技)