解码
gcd (x, n) = 1
=> gcd(x^c, n) = 1
=> gcd(x^c % n, n) = gcd(x^c, n) = 1
=> gcd(m, n) = 1
符合欧拉定理的条件,
=> m ^ φ(n) ≡ 1 (mod n)
=> if (k·c ≡ 1 (mod φ (n)) ), m ^ (k·c) ≡ m (mod n)
=> x = m ^ k
所以只需要求出φ(n), k
又有 n = p * q, 且 p、q均为质数,
所以φ(n) = (p - 1) *(q - 1), 只需求出 p、q、k
由于p、q均为奇素数, 那么可以表示为以下形式 :
p = s - a, q = s + a
那么 n = (s - a) * (s + a) = s^2 - a ^ 2
所以只需要找到一个最小的、与 n 的差值为平方数的平方数就可以求出p、q了
而 k, 则可以通过 k · c ≡ 1 (mod φ(n)), 用ex_gcd求解
然后在通过 m ^ k 求解 x 时要用快速乘