百科问答小站 logo
百科问答小站 font logo



求一个整数的所有素数因子的思路是什么? 第1页

  

user avatar   nayilus 网友的相关建议: 
      
  1. 一般的小数可以用简单筛法找出质数列表,然后一个个试。这种方法简单暴力,但是对几亿以下的数字可以很快。

2. 再大一点的数 就用Pollard的 算法,思路:

任取一个数 开始,不断计算 ,则如果 有质因数 ,那么 应该能更快地进入循环,可以用龟兔赛跑算法(图形状像 ,因此算法得名)试图找出这个循环点,一旦找到 ,立刻可以算 和 的最大公约数得到分解。有一定几率失败。

3. 更大的但在 以下的 可以用Lenstra椭圆曲线算法(ECM),思路:

挑选椭圆曲线 外加上面某一点 ,然后取一个较小的阶乘 ,反复用椭圆曲线加法算出 ,在重复计算加法中每一步都会计算和曲线切线斜率 同余的整数,即找出整数 使得 ,方法为找 和 的最大公约数,在这个过程中如果得出公约数大于1则分解成立,有一定几率失败。

4. 更大的 以下的 可以用二次筛(QS),思路

费尔马分解法试图把奇数 写成 的方法,这样立刻可得因数分解 ,二次筛就是一种可以高效找到此类数字的方法,试图测试多个介于 和 之间的数 ,如果 正好是完全平方那就成了,不然找到几个不同的 ,如果乘积正好是完全平方数,那么 满足条件。

5. 再往上只能用普通数域筛选法(GNFS),这个就很复杂了,思路

也是用费尔马分解法,只是比二次筛更高效,核心定理:

取系数为整数的 次多项式 有复根 ,并存在不是 倍数的整数 ,使得 为 倍数,将所有次数不超过 的整系数多项式代入后的值定义为一个“环”(因为任何两个这样形式的数的和或积依然是这样形式的数),那么必然存在一个将这个环里的复数映射到不是 倍数的整数上的函数 满足:

i -

ii -

iii -

iv -

已知这个定理后,如果找到整数对 使得复数 ,整数 ,以及 的映像 ,则很容易根据i-iv得到 ,有2/3机会能由此找到 的一个约数。

2009年,232位的RSA-768数通过上百台计算机耗时两年成功分解,用的就是高度优化后的GNFS。




  

相关话题

  法律是否可能被代码化? 
  GitHub 或者其他的开源平台中是否有一些适合初学者的 C++ 项目? 
  请问这道无穷级数题有什么巧妙的解法? 
  如何看待知乎用户李归农嘲讽数学家华罗庚被驳斥无回应? 
  有哪些一看就会,一做就错的数学题? 
  初中未毕业的人自学得了编程吗? 
  如何评价 2021 年 1 月 23 日八省联考数学试卷? 
  能用高等数学手段研究人文社科问题吗? 
  为什么中国的计算机教育这么落后? 
  物理系的学生数学学到什么地步合适? 

前一个讨论
对大多数人来说数学无用,但要高考,不想学数学,怎么克服这种心理?
下一个讨论
有没有一些有意思的悖论,没意思也行,但要是悖论?





© 2024-11-10 - tinynew.org. All Rights Reserved.
© 2024-11-10 - tinynew.org. 保留所有权利