大数因数分解Pollard_rho 算法
2017-11-26 22:34
246 查看
大数分解最简单的思想也是试除法,这里就不再展示代码了,就是从2到sqrt(n),一个一个的试验,直到除到1或者循环完,最后判断一下是否已经除到1了即可。
但是这样的做的复杂度是相当高的。一种很妙的思路是找到一个因子(不一定是质因子),然后再一路分解下去。这就是基于Miller_rabin的大数分解法Pollard_rho大数分解。
Pollard_rho算法的大致流程是 先判断当前数是否是素数(Miller_rabin)了,如果是则直接返回。如果不是素数的话,试图找到当前数的一个因子(可以不是质因子)。然后递归对该因子和约去这个因子的另一个因子进行分解。
那么自然的疑问就是,怎么找到当前数n的一个因子?当然不是一个一个慢慢试验,而是一种神奇的想法。其实这个找因子的过程我理解的不是非常透彻,感觉还是有一点儿试的意味,但不是盲目的枚举,而是一种随机化算法。我们假设要找的因子为p,他是随机取一个x1,由x1构造x2,使得{p可以整除x1-x2 && x1-x2不能整除n}则p=gcd(x1-x2,n),结果可能是1也可能不是1。如果不是1就找寻成功了一个因子,返回因子;如果是1就寻找失败,那么我们就要不断调整x2,具体的办法通常是x2=x2*x2+c(c是自己定的)直到出现x2出现了循环==x1了表示x1选取失败重新选取x1重复上述过程。(似乎还存在一个每次找寻范围*2的优化,但是不太懂。。。)
这个地方我是不太会做的。
但是这样的做的复杂度是相当高的。一种很妙的思路是找到一个因子(不一定是质因子),然后再一路分解下去。这就是基于Miller_rabin的大数分解法Pollard_rho大数分解。
Pollard_rho算法的大致流程是 先判断当前数是否是素数(Miller_rabin)了,如果是则直接返回。如果不是素数的话,试图找到当前数的一个因子(可以不是质因子)。然后递归对该因子和约去这个因子的另一个因子进行分解。
那么自然的疑问就是,怎么找到当前数n的一个因子?当然不是一个一个慢慢试验,而是一种神奇的想法。其实这个找因子的过程我理解的不是非常透彻,感觉还是有一点儿试的意味,但不是盲目的枚举,而是一种随机化算法。我们假设要找的因子为p,他是随机取一个x1,由x1构造x2,使得{p可以整除x1-x2 && x1-x2不能整除n}则p=gcd(x1-x2,n),结果可能是1也可能不是1。如果不是1就找寻成功了一个因子,返回因子;如果是1就寻找失败,那么我们就要不断调整x2,具体的办法通常是x2=x2*x2+c(c是自己定的)直到出现x2出现了循环==x1了表示x1选取失败重新选取x1重复上述过程。(似乎还存在一个每次找寻范围*2的优化,但是不太懂。。。)
这个地方我是不太会做的。
相关文章推荐
- 大数因数分解Pollard_rho 算法详解
- 数学#素数判定Miller_Rabin+大数因数分解Pollard_rho算法 POJ 1811&2429
- 大素数判断和素因子分解(miller-rabin,Pollard_rho算法)
- 大素数判断和素因子分解(miller-rabin,Pollard_rho算法)
- poj1811(miller_robin和pollard分解因数的随机性算法)
- [数论] Miller_Rabbin算法判断大素数,Pollard_rho算法进行质因素分解
- 快速分解质因数,Miller_Rabin+Pollard_rho
- Pollard_rho算法模板(大整数的因子分解)
- 大素数判断和素因子分解(miller-rabin,Pollard_rho算法)
- 【知识点】大数分解与素数判定 --- 【Miller-rabin算法】【pollard-rho算法】
- 模板,pollard_rho大数因数分解
- 大素数判断和素因子分解(miller-rabin,Pollard_rho算法)
- Pollard_rho算法(大整数的因子分解或判断是否为素数)
- 大素数判断和素因子分解模板(miller-rabin,Pollard_rho算法)
- 大素数判断和素因子分解(miller-rabin,Pollard_rho算法)
- Pollard的rho启发式因子分解算法 & [CodeVS 4939] 欧拉函数:Miller-Rabin + Pollard-rho 质因数分解
- 大素数判断和素因子分解(miller-rabin,Pollard_rho算法)
- miller_rabin素数判断和pollard_rho的素数因子分解算法
- 大素数判断和素因子分解(miller-rabin,Pollard_rho算法)
- 大素数判断和素因子分解(miller-rabin,Pollard_rho算法)