有理筛选法:修订间差异

维基百科,自由的百科全书
删除的内容 添加的内容
无编辑摘要
无编辑摘要
第1行: 第1行:
在[[数学]]上,'''有理筛选法'''是一种将[[整数分解]]的通用[[算法]]。它是一般数域筛选法的特例。虽然它比一般的数域筛选法效率低,但它在概念上更简单,对理解后续的数域筛选法的原理起到重要的铺垫作用。相当于后续的数域筛选法的过程,该算法在数域选择的过程中本质上只涉及到有理数域,因此其名称可能来源于此特性。
在[[数学]]上,'''有理筛选法'''是一种将[[整数分解]]的通用[[算法]]。它是一般数域筛选法的特例。虽然它比一般的数域筛选法效率低,但它在概念上更简单,对理解后续的数域筛选法的原理起到重要的铺垫作用。相当于后续的数域筛选法的过程,该算法在数域选择的过程中本质上只涉及到有理数域{{r|Fermat|page=327}}{{r|DevNFS|page=55}},因此其名称可能来源于此特性。


== 方法 ==
== 方法 ==
第19行: 第19行:


== 例子 ==
== 例子 ==
下面使用有理筛选法分解整数''n'' = 187. 首先随便选取''B'' = 7作为尝试,这时因子基''P''&nbsp;=&nbsp;{2,3,5,7}. 第一步先是测试''n''是否可以被''P''的每个成员整除,如果是这样的话那么我们就直接找到了''n''的一个因子,这样就成功将''n''分解无需继续了<ref>实际情况下要分解的''n''比通常选择的''B''大得多,一般这里只能排除很小的因子,并不是将''B''取大一点就能解决的问题。因此这里只是举例。</ref>。但现在187并不能被 2,3,5或7整除,所以接下来就应该继续,开始寻找合适的''z''值;前几个是 2,5,9和56. ''z''的四个合适的值给出了四个模187意义下的乘法关系:{{NumBlk|:|<math>2^1 3^0 5^0 7^0 = 2 \equiv 189 = 2^0 3^3 5^0 7^1</math>|{{EquationRef|1}}}}{{NumBlk|:|<math>2^0 3^0 5^1 7^0 = 5 \equiv 192 = 2^6 3^1 5^0 7^0</math>|{{EquationRef|2}}}}{{NumBlk|:|<math>2^0 3^2 5^0 7^0 = 9 \equiv 196 = 2^2 3^0 5^0 7^2</math>|{{EquationRef|3}}}}{{NumBlk|:|<math>2^3 3^0 5^0 7^1 = 56 \equiv 243 = 2^0 3^5 5^0 7^0</math>|{{EquationRef|4}}}}现在有几种本质上不同的方法可以将这些组合起来并最终得到全部为偶数的幂次。例如,
下面使用有理筛选法分解整数''n'' = 187. 首先随便选取''B'' = 7作为尝试,这时因子基''P''&nbsp;=&nbsp;{2,3,5,7}. 第一步先是测试''n''是否可以被''P''的每个成员整除,如果是这样的话那么我们就直接找到了''n''的一个因子,这样就成功将''n''分解无需继续了{{notetag|实际情况下要分解的''n''比通常选择的''B''大得多,一般这里只能排除很小的因子,并不是将''B''取大一点就能解决的问题。因此这里只是举例。}}。但现在187并不能被 2,3,5或7整除,所以接下来就应该继续,开始寻找合适的''z''值;前几个是 2,5,9和56. ''z''的四个合适的值给出了四个模187意义下的乘法关系:{{NumBlk|:|<math>2^1 3^0 5^0 7^0 = 2 \equiv 189 = 2^0 3^3 5^0 7^1</math>|{{EquationRef|1}}}}{{NumBlk|:|<math>2^0 3^0 5^1 7^0 = 5 \equiv 192 = 2^6 3^1 5^0 7^0</math>|{{EquationRef|2}}}}{{NumBlk|:|<math>2^0 3^2 5^0 7^0 = 9 \equiv 196 = 2^2 3^0 5^0 7^2</math>|{{EquationRef|3}}}}{{NumBlk|:|<math>2^3 3^0 5^0 7^1 = 56 \equiv 243 = 2^0 3^5 5^0 7^0</math>|{{EquationRef|4}}}}现在有几种本质上不同的方法可以将这些组合起来并最终得到全部为偶数的幂次。例如,


* (1)×(4): 在将这些相乘并消去共同的因子 7 之后(其它的一般情况下'''不能'''直接消去,本算法的过程中是一定可以的,原因是因为 7 已经确定与''n''互素 <ref>因此其它的''P''中的素数也是如此。另外可以参见[[模逆元]]条目。</ref>),关系式简化为了2<sup>4</sup> ≡ 3<sup>8</sup> (mod ''n''),或 4<sup>2</sup> ≡ 81<sup>2</sup>(mod ''n'')。结果分解为 187 = gcd(81-4,187) × gcd(81+4,187) = 11×17.
* (1)×(4): 在将这些相乘并消去共同的因子 7 之后(其它的一般情况下'''不能'''直接消去,本算法的过程中是一定可以的,原因是因为 7 已经确定与''n''互素 {{notetag|因此其它的''P''中的素数也是如此。另外可以参见[[模逆元]]条目。}}),关系式简化为了2<sup>4</sup> ≡ 3<sup>8</sup> (mod ''n''),或 4<sup>2</sup> ≡ 81<sup>2</sup>(mod ''n'')。结果分解为 187 = gcd(81-4,187) × gcd(81+4,187) = 11×17.


或者,等式(3)本身已经是我们想要的形式:
或者,等式(3)本身已经是我们想要的形式:
第28行: 第28行:


== 局限性 ==
== 局限性 ==
有理筛选法与一般数域筛选法一样,不能因式分解''p<sup>m</sup>''形式的数字,其中''p''是素数,''m''是整数。不过,这根本不是什么问题,因为要分解的整数基本不可能会是这种数,并且已经有简单而快速的方法来事先检查给定的数字是否属于这种数字。可能最简洁实用的方法是利用整数版本的求方根的[[牛顿法]],检查是否存在(1, log{{Sub|2}}(n)]范围内的整数''b''使得<math>\lfloor n^{1/b}\rfloor^b=n</math>成立。<ref>R. Crandall and J. Papadopoulos, ''On the implementation of AKS-class primality tests,'' 链接:[https://www.apple.com/acg/pdf/aks3.pdf]</ref>
有理筛选法与一般数域筛选法一样,不能因式分解''p<sup>m</sup>''形式的数字,其中''p''是素数,''m''是整数。不过,这根本不是什么问题,因为要分解的整数基本不可能会是这种数,并且已经有简单而快速的方法来事先检查给定的数字是否属于这种数字。可能最简洁实用的方法是利用整数版本的求方根的[[牛顿法]],检查是否存在(1, log{{Sub|2}}(n)]范围内的整数''b''使得<math>\lfloor n^{1/b}\rfloor^b=n</math>成立。{{r|RC}}


最大的问题是找到足够数量的''z''使得''z''和''z'' + ''n''都是''B''平滑的。对于任意一个固定的''B'' ,随着数字数值的增大,符合要求的''B''平滑数字的比例会迅速下降。因此,如果''n''很大(例如,一百多位数),则很难或者根本不可能找到足够多的''z'', 这样这个算法就不太可行了。而后续的一般数域筛选法的优点是要找的光滑数的大小只需要在''n''<sup>1/''d''</sup>(''d''通常为3或5的整数)这个数量级左右,而不是这里的''n''的数量级。
最大的问题是找到足够数量的''z''使得''z''和''z'' + ''n''都是''B''平滑的。对于任意一个固定的''B'' ,随着数字数值的增大,符合要求的''B''平滑数字的比例会迅速下降。因此,如果''n''很大(例如,一百多位数),则很难或者根本不可能找到足够多的''z'', 这样这个算法就不太可行了。而后续的一般数域筛选法的优点是要找的光滑数的大小只需要在''n''<sup>1/''d''</sup>(''d''通常为3或5的整数)这个数量级左右,而不是这里的''n''的数量级。


== 参考 ==
== 注释 ==
{{notefoot}}
== 参考文献及注释 ==
{{reflist|refs=<ref name="DevNFS">{{cite encyclopedia |author=A. K. Lenstra, H. W. Lenstra, Jr. (eds.) |title=The Development of the Number Field Sieve |encyclopedia=Lecture Notes in Mathematics |volume=1554 |year=1993 |publisher=Springer-Verlag |location=New York |isbn=9783540570134}}</ref><ref name="Fermat">{{cite journal |author1=A. K. Lenstra |author2=H. W. Lenstra |author3=Jr. |author4=M. S. Manasse |author5=J. M. Pollard |title=The Factorization of the Ninth Fermat Number |journal=Math. Comp |date=1993 |volume=61 |pages=319-349 |url=https://www.ams.org/journals/mcom/1993-61-203/S0025-5718-1993-1182953-4/S0025-5718-1993-1182953-4.pdf}}</ref><ref name="RC">{{cite journal |author1=R. Crandall |author2=J. Papadopoulos |title=On the implementation of AKS-class primality tests |url=https://www.apple.com/acg/pdf/aks3.pdf}}</ref>}}


* A. K. Lenstra, H. W. Lenstra, Jr., M. S. Manasse, and J. M. Pollard, ''The Factorization of the Ninth Fermat Number,'' Math. Comp. '''61''' (1993), 319-349. 链接:[https://www.ams.org/journals/mcom/1993-61-203/S0025-5718-1993-1182953-4/S0025-5718-1993-1182953-4.pdf].
* A. K. Lenstra, H. W. Lenstra, Jr. (eds.) ''The Development of the Number Field Sieve,'' Lecture Notes in Mathematics 1554, Springer-Verlag, New York, 1993.

== 脚注 ==
{{reflist}}
{{数论算法}}
{{数论算法}}
[[Category:整数分解算法]]
[[Category:整数分解算法]]

2022年2月22日 (二) 14:25的版本

数学上,有理筛选法是一种将整数分解的通用算法。它是一般数域筛选法的特例。虽然它比一般的数域筛选法效率低,但它在概念上更简单,对理解后续的数域筛选法的原理起到重要的铺垫作用。相当于后续的数域筛选法的过程,该算法在数域选择的过程中本质上只涉及到有理数域[1]:327[2]:55,因此其名称可能来源于此特性。

方法

假设我们试图分解合数n .我们选择一个边界B , 并确定B对应的因数基底(我们将称为P ),即小于等于B的所有素数的集合。接下来,我们搜索正整数z使得zz+n都是B平滑的—即它们的所有素因子都在P中。因此有:

其中对应的幂次。同样, 我们有

.

其中对应的幂次。 但在模意义下相等 ,所以对于每一个这样的整数z, 我们找到了P的元素之间产生的一个模n的乘法关系 ,即

(其中aibi是非负整数。 )

当我们生成了足够多的这些关系时(关系的数量通常比集合P的大小多几个通常就足够了),我们可以使用线性代数的方法将这些不同的关系相乘,使得这些素数的幂次都是偶数(我们只关心幂次的奇偶性,这时相当于将幂次对2取模,视为二元域英语GF(2)上的整数,所有素数的幂次总体可以视为一个向量,幂次全为偶数相当于向量的分量全为0, 得到该结果的过程即为在二元域的运算规则下将向量的分量全部消为0的过程)。这样就能够产生一个平方同余关系:a2 ≡b2 (mod n), 从而得到n的一个因式分解:n = gcd(a-b,n)×gcd(a+b, n) . 这种因式分解可能会产生平凡的结果(即n=n×1),这种情况下需要再次尝试使用不同的关系组合,如果运气足够好,最后就能够得到一对非平凡的n因子,成功将n分解,算法结束。

例子

下面使用有理筛选法分解整数n = 187. 首先随便选取B = 7作为尝试,这时因子基P = {2,3,5,7}. 第一步先是测试n是否可以被P的每个成员整除,如果是这样的话那么我们就直接找到了n的一个因子,这样就成功将n分解无需继续了[註 1]。但现在187并不能被 2,3,5或7整除,所以接下来就应该继续,开始寻找合适的z值;前几个是 2,5,9和56. z的四个合适的值给出了四个模187意义下的乘法关系:

(1)
(2)
(3)
(4)

现在有几种本质上不同的方法可以将这些组合起来并最终得到全部为偶数的幂次。例如,

  • (1)×(4): 在将这些相乘并消去共同的因子 7 之后(其它的一般情况下不能直接消去,本算法的过程中是一定可以的,原因是因为 7 已经确定与n互素 [註 2]),关系式简化为了24 ≡ 38 (mod n),或 42 ≡ 812(mod n)。结果分解为 187 = gcd(81-4,187) × gcd(81+4,187) = 11×17.

或者,等式(3)本身已经是我们想要的形式:

  • (3):32 ≡ 142 (mod n ),得到因式分解 187 = gcd(14-3,187) × gcd(14+3,187) = 11×17.

局限性

有理筛选法与一般数域筛选法一样,不能因式分解pm形式的数字,其中p是素数,m是整数。不过,这根本不是什么问题,因为要分解的整数基本不可能会是这种数,并且已经有简单而快速的方法来事先检查给定的数字是否属于这种数字。可能最简洁实用的方法是利用整数版本的求方根的牛顿法,检查是否存在(1, log2(n)]范围内的整数b使得成立。[3]

最大的问题是找到足够数量的z使得zz + n都是B平滑的。对于任意一个固定的B ,随着数字数值的增大,符合要求的B平滑数字的比例会迅速下降。因此,如果n很大(例如,一百多位数),则很难或者根本不可能找到足够多的z, 这样这个算法就不太可行了。而后续的一般数域筛选法的优点是要找的光滑数的大小只需要在n1/dd通常为3或5的整数)这个数量级左右,而不是这里的n的数量级。

注释

  1. ^ 实际情况下要分解的n比通常选择的B大得多,一般这里只能排除很小的因子,并不是将B取大一点就能解决的问题。因此这里只是举例。
  2. ^ 因此其它的P中的素数也是如此。另外可以参见模逆元条目。

参考文献及注释

  1. ^ A. K. Lenstra; H. W. Lenstra; Jr.; M. S. Manasse; J. M. Pollard. The Factorization of the Ninth Fermat Number (PDF). Math. Comp. 1993, 61: 319–349. 
  2. ^ A. K. Lenstra, H. W. Lenstra, Jr. (eds.). The Development of the Number Field Sieve. Lecture Notes in Mathematics 1554. New York: Springer-Verlag. 1993. ISBN 9783540570134. 
  3. ^ R. Crandall; J. Papadopoulos. On the implementation of AKS-class primality tests (PDF).