Miller-Rablin与Pollard-Rho算法(素性测试与质因数分解)
前置 费马小定理(即若P为质数,则 \(A^P\equiv A \pmod{P}\) )。 欧几里得算法(GCD)。 快速幂,龟速乘。 素性测试 引入 素性测试是OI中一个十分重要的事,在数学毒瘤题中有着举足轻重的地位。 常见的素性测试如下: int check(int N){ for(int i=2;i*i<=N;i++) if(N%i==0)return 0; return 1; } 以上是一个 \(O(\sqrt{N})\) 的算法,虽然不优,但在绝大多数情况下是可以的。 但是,假如 \(N\) 的范围达到了 \(1e18\) ,以上算法很明显就不行了,我们得考虑更优的算法。 引入Miller-Rablin算法。 定理1 定理1:如果 \(P\) 为一个 大于2 的素数,那么方程 \(X^2\equiv1 \pmod{P}\) 的解只有1或者-1。 (是真得水的) 证明如下: 由 \(X^2\equiv1 \pmod{P}\) ,得 \((X^2-1)\equiv0 \pmod{P}\) , 即 \({(X+1)(X-1)}\equiv0 \pmod{P}\) 。 则 \(P | (X+1)\) 或 \(P|(X-1)\) , 即 \((X+1)\equiv0 \pmod{P}\) 或 \((X-1)\equiv0 \pmod{P}\) 。 则 \(X\equiv-1