【问题标题】:Does Pollard Rho not work for certain numbers?Pollard Rho 是否不适用于某些数字?
【发布时间】:2018-01-10 21:58:55
【问题描述】:

我正在尝试根据我在 Wikipedia 上找到的伪代码来实现 Pollard Rho,但它似乎不适用于数字 4、8 和 25,我不知道为什么。

这是我的代码:

    long long x = initXY;
    long long y = initXY;
    long long d = 1;

    while (d == 1) {
        x = polynomialModN(x, n);
        y = polynomialModN(polynomialModN(y, n), n);

        d = gcd(labs(x - y), n);
    }
    if (d == n)
        return getFactor(n, initXY + 1);

    return d;

这是我的多项式函数:

long long polynomialModN(long long x, long long n) {
    return (x * x + 1) % n;
}

这是来自维基百科的示例伪代码:

x ← 2; y ← 2; d ← 1
while d = 1:
    x ← g(x)
    y ← g(g(y))
    d ← gcd(|x - y|, n)
if d = n: 
    return failure
else:
    return d

唯一的区别:我不返回失败,而是尝试不同的初始化变量,正如维基百科也指出的那样:

这里 x 和 y 对应于 x i {\displaystyle x_{i}} x_{i} 和 x j {\displaystyle x_{j}} x_{j} 在关于核心思想的部分。注意 即使当 n 为 合成的。在这种情况下,可以再次尝试该方法,使用 起始值不是 2 或不同的 g ( x ) {\displaystyle g(x)} g(x)。

Pollard-Rho 是否不适用于某些数字?他们的特点是什么?还是我做错了什么?

【问题讨论】:

  • 要查看它为什么不起作用,只需打印出多项式函数的结果。当n为4时,输出总是在循环1,2,1,2,1,2结束。当n为8时,循环为2,5,2,5,2,5,当n为25时,循环为1,2,5,1,2,5,1,2,5。所以你可以看到,除非你很幸运并在循环开始之前找到答案(这不会发生),否则这些方法是行不通的。
  • 好吧,但为什么理论上不起作用,还有哪些更大的数字(如果有)不起作用?
  • 引用维基百科条目,“所以序列 { x k mod p } {\displaystyle \{x_{k}{\bmod {p}}\}} {\displaystyle \{x_{k }{\bmod {p}}\}} 可能会比序列 { x k } {\displaystyle \{x_{k}\}} {\displaystyle \{x_{k}\}} 更早地重复。”注意“可能”这个词。这是基于概率的,假设多项式函数的作用类似于对因子的随机映射 - 这不是保证。我会尝试一些不同的二次方,也许是三次方或二次方,看看这些是否适用于您目前使用的多项式未考虑的数字。

标签: algorithm factorization


【解决方案1】:

Pollard Rho 不适用于偶数。如果您有偶数,请先删除 2 的所有因数,然后再应用 Pollard Rho 找到奇数因数。

Pollard Rho 正确地分解了 25,但它同时找到了两个 5 的因数,因此它返回了 25 的因数。这是正确的,但没有用。所以 Pollard Rho 不会找到任何幂的因数(平方、立方等)。

虽然我没有运行它,但您的 Pollard Rho 函数看起来还不错。维基百科改变起点的建议可能会奏效,但通常不会。正如 Wikipedia 还建议的那样,最好更改随机函数 g。最简单的方法是增加加数;代替 x²+1,使用 x²+c,其中 c 最初为 1 并增加到 2 , 3, … 每次失败后。

【讨论】:

  • 实际上,它可能会影响力量,但只能靠运气。
  • 你能给我一些背景知识吗?该函数似乎适用于大多数偶数,也适用于许多正方形(16、36、49,...)
  • 你是对的;该算法是概率性的,因此它有时会考虑偶数和完美幂。但它经常在偶数上失败,所以最好在调用 Pollard Rho 之前删除 2 的因数;事实上,您可能还想在调用 Pollard Rho 之前使用试用除法来删除其他小因素。完美权力的情况与此类似。一些因素,但大多数没有,所以最好在开始之前检查完美的力量,或者至少如果你得到一个因素n
  • @user448810 你能提供一个关于“它经常在偶数和完美幂上失败”的说法的参考吗?我试图搜索它,但没有找到任何东西。
【解决方案2】:

在这里,由于 x 可以与 n-1 一样大,因此 polynomialModN 函数中的乘积将溢出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-24
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    相关资源
    最近更新 更多