Loading docs/math/pollard-rho.md +3 −3 Original line number Diff line number Diff line Loading @@ -39,7 +39,7 @@ $$ 最大公约数一定是某个数的约数,即 $\forall k \in\mathbb{N}_{+},\gcd(k,n)|n$ ,只要选适当的 $k$ 使得 $1<\gcd(k,n)< n$ ,就可以求得一个约数 $\gcd(k,n)$ 。满足这样条件的 $k$ 不少, $k$ 有若干个质因子,每个质因子及其倍数都是可行的。 根据生日悖论,取多组数据作差能够优化取数的精确性。那么不妨取一组数 $x_1,x_2,\dots,x_n$ 若有 $1<\gcd(|x_i-x_j|,n) < n$ , 则称 $gcd(|x_i-x_j|,N)$ 是 $N$ 的一个因子(更严谨一些,应该是非平凡因子,即满足 $1< d < n,d|n$ 的那些数)。 根据生日悖论,取多组数据作差能够优化取数的精确性。那么不妨取一组数 $x_1,x_2,\dots,x_n$ 若有 $1<\gcd(|x_i-x_j|,n) < n$ , 则称 $\gcd(|x_i-x_j|,N)$ 是 $N$ 的一个因子(更严谨一些,应该是非平凡因子,即满足 $1< d < n,d|n$ 的那些数)。 ### 构造伪随机函数 Loading Loading @@ -109,7 +109,7 @@ $$ 例题: [P4718【模板】Pollard-Rho 算法](https://www.luogu.com.cn/problem/P4718) 对于一个数 $n$ ,用 [Miller Rabin 算法](./prime.md#4) 判断是否为素数,如果是就可以直接返回了,否则用 Pollard-Rho 算法找一个因子 $p$ ,将 $n$ 除去因子 $p$ 。再递归分解 $n$ 和 $p$ ,用 Miller Rabin 判断是否出现质因子,并用 max_factor 更新就可以求出最大质因子了。由于这个题目的数据过于庞大,用 Floyd 判环的方法是不够的,这里采用倍增优化的方法。 对于一个数 $n$ ,用 [Miller Rabin 算法](./prime.md#_4) 判断是否为素数,如果是就可以直接返回了,否则用 Pollard-Rho 算法找一个因子 $p$ ,将 $n$ 除去因子 $p$ 。再递归分解 $n$ 和 $p$ ,用 Miller Rabin 判断是否出现质因子,并用 max_factor 更新就可以求出最大质因子了。由于这个题目的数据过于庞大,用 Floyd 判环的方法是不够的,这里采用倍增优化的方法。 ??? note "参考实现" ```c++ Loading Loading
docs/math/pollard-rho.md +3 −3 Original line number Diff line number Diff line Loading @@ -39,7 +39,7 @@ $$ 最大公约数一定是某个数的约数,即 $\forall k \in\mathbb{N}_{+},\gcd(k,n)|n$ ,只要选适当的 $k$ 使得 $1<\gcd(k,n)< n$ ,就可以求得一个约数 $\gcd(k,n)$ 。满足这样条件的 $k$ 不少, $k$ 有若干个质因子,每个质因子及其倍数都是可行的。 根据生日悖论,取多组数据作差能够优化取数的精确性。那么不妨取一组数 $x_1,x_2,\dots,x_n$ 若有 $1<\gcd(|x_i-x_j|,n) < n$ , 则称 $gcd(|x_i-x_j|,N)$ 是 $N$ 的一个因子(更严谨一些,应该是非平凡因子,即满足 $1< d < n,d|n$ 的那些数)。 根据生日悖论,取多组数据作差能够优化取数的精确性。那么不妨取一组数 $x_1,x_2,\dots,x_n$ 若有 $1<\gcd(|x_i-x_j|,n) < n$ , 则称 $\gcd(|x_i-x_j|,N)$ 是 $N$ 的一个因子(更严谨一些,应该是非平凡因子,即满足 $1< d < n,d|n$ 的那些数)。 ### 构造伪随机函数 Loading Loading @@ -109,7 +109,7 @@ $$ 例题: [P4718【模板】Pollard-Rho 算法](https://www.luogu.com.cn/problem/P4718) 对于一个数 $n$ ,用 [Miller Rabin 算法](./prime.md#4) 判断是否为素数,如果是就可以直接返回了,否则用 Pollard-Rho 算法找一个因子 $p$ ,将 $n$ 除去因子 $p$ 。再递归分解 $n$ 和 $p$ ,用 Miller Rabin 判断是否出现质因子,并用 max_factor 更新就可以求出最大质因子了。由于这个题目的数据过于庞大,用 Floyd 判环的方法是不够的,这里采用倍增优化的方法。 对于一个数 $n$ ,用 [Miller Rabin 算法](./prime.md#_4) 判断是否为素数,如果是就可以直接返回了,否则用 Pollard-Rho 算法找一个因子 $p$ ,将 $n$ 除去因子 $p$ 。再递归分解 $n$ 和 $p$ ,用 Miller Rabin 判断是否出现质因子,并用 max_factor 更新就可以求出最大质因子了。由于这个题目的数据过于庞大,用 Floyd 判环的方法是不够的,这里采用倍增优化的方法。 ??? note "参考实现" ```c++ Loading