百科问答小站 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。




  

相关话题

  皮尔逊系数为什么要中心化?中心化之后有什么好处? 
  《图灵传》中讲到「狄拉克基于抽象数学预言了正电子的存在」,其中细节为何? 
  请问如何求下面这个连分数收敛到的值? 
  解微分方程为什么会出现个 e? 
  C++的优势有哪些? 
  一个即将步入大学对编程感兴趣的学生,3 年能将 Java 学到什么程度,应怎样合理分配这 3 年? 
  男孩比女孩更擅长数学是真的吗? 
  这个公式如何证明? 
  C++ 对 c 兼容是什么意思? 
  可以在非中文的网站使用中文吗? 

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





© 2024-12-25 - tinynew.org. All Rights Reserved.
© 2024-12-25 - tinynew.org. 保留所有权利