简介
Pollard rho算法是一种用于整数因子分解的有效算法,由Pollard于1975年提出。该算法的核心思想是基于随机化方法,通过在一个循环中生成一个伪随机序列,以期找到大整数的非平凡因子。Pollard rho算法在理论上具有较高的效率,尤其适用于分解具有较小因子的大整数。本文将详细介绍Pollard rho算法的基本原理、步骤及其在整数因子分解领域的应用。
生日悖论
生日悖论其实不是一个逻辑悖论,只是与很多人的第一感觉不符。它可以表述为:
一个房间里有23个人,则他们中有两人生日相同的概率超过一半
(不考虑闰年)。其实这在数学上很好证明,即
生日悖论启示我们,如果我们不断在某个范围内生成随机整数,很快便会生成到重复的数,期望大约在根号级别。精确地说,对于一个
算法思想
考虑一个序列
当
理论
我们考虑
同时我们定义
也就是我们可以在
假设
至此可以得到,对于合数
参考代码
下面为笔者自行实现的 rho 方法参考代码,其中素性检测使用
Miller_Rabin
,其基为
2,325,9375,28178,450775,9780504,1795265022
,这样可以确保在long
long的数据规模下准确判断(即若程序输出为1即为真素数,为0则为合数)。
1 | inline ll qmul(ll x,ll y,ll mod){ |