有理筛选法

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

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

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

 .

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

 

（其中ai和bi是非负整数。 )

当我们生成了足够多的这些关系时（关系的数量通常比集合P的大小多几个通常就足够了），我们可以使用线性代数的方法将这些不同的关系相乘，使得这些素数的幂次都是偶数（我们只关心幂次的奇偶性，这时相当于将幂次对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分解无需继续了。但现在187并不能被 2,3,5或7整除，所以接下来就应该继续，开始寻找合适的z值；前几个是 2,5,9和56. z的四个合适的值给出了四个模187意义下的乘法关系：现在有几种本质上不同的方法可以将这些组合起来并最终得到全部为偶数的幂次。例如，

 (1)×(4): 在将这些相乘并消去共同的因子 7 之后（其它的一般情况下不能直接消去，本算法的过程中是一定可以的，原因是因为 7 已经确定与n互素 ），关系式简化为了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, log(n)]范围内的整数b使得成立。

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

注释

参考文献 

整数分解算法