快速分解

时间:2012-04-27 16:18:30

标签: algorithm discrete-mathematics factorization

  

对于给定数n(我们知道n = p ^ a * q ^ b,对于一些素数p,q和一些整数a,b)和给定数字φ(n)(http://en.wikipedia.org/wiki/Euler%27s_totient_function )找到p,q,a和b。

捕获是n,而φ(n)有大约200位数,因此算法必须非常快。 这似乎是非常困难的问题,我完全不知道如何使用φ(n)。

如何处理?

2 个答案:

答案 0 :(得分:6)

对于n = p^a * q^b,总数为φ(n) = (p-1)*p^(a-1) * (q-1)*q^(b-1)。不失一般性,p < q

gcd(n,φ(n)) = p^(a-1) * q^(b-1) p q-1如果gcd(n,φ(n)) = p^a * q^(b-1)pq-1如果n/gcd(n,φ(n)) = p*q除以φ(n)/gcd(n,φ(n)) = (p-1)*(q-1) = p*q + 1 - (p+q),则为x = p*q = n/gcd(n,φ(n))

在第一种情况下,我们有y = p+q = n/gcd(n,φ(n)) + 1 - φ(n)/gcd(n,φ(n))p,因此您有qy^2 - 4*x = (q-p)^2。然后查找q = (y + sqrt(y^2 - 4*x))/2p = y-q很简单:abn/gcd(n,φ(n)) = q。然后找到指数bq是微不足道的。

在第二种情况下,p^a。然后,您可以轻松找到指数φ(n),除以(q-1)*q^(b-1),直到除法留下余数,从而获得z = (p-1)*p^(a-1)。将p^a - z = p^(a-1)除以p = p^a/(p^a-z)会给您a。然后是n/gcd(n,φ(n))和{{1}}。找到指数{{1}}再次是微不足道的。

所以仍然需要决定你拥有哪种情况。当且仅当{{1}}是素数时才有案例2。

为此,你需要一个体面的素性测试。或者你可以先假设你有案例1,如果不成功,可以断定你有案例2。

答案 1 :(得分:0)

尝试计算n /(n - φ(n))是什么。

跟进:

n /(n - φ(n))= pq。你只需要将p除以pq。