Pollard_rho算法模板(大整数的因子分解)

终于懂了点Pollard_rho算法的原理

int pollard_rho(int n, int c)///c为自己设定的某值
{
	int x, y, d, i = 1, k = 2;
	x = rand() % (n - 1) + 1;
	y = x;
	while (true) {
		++i;
		x = (modular_multi(x, x, n) + c) % n;
		d = gcd(y - x, n);
		if (1 < d && d < n)
			return d;
		if (x == y)
			return n;
		if (i == k)
			y = x, k <<= 1;
	}
}


底下补个kuangbin牛分解质因数模板:http://www.cnblogs.com/kuangbin/archive/2012/08/19/2646396.html

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是使用 Python 语言实现 Pollard Rho 算法进行因式分解的代码: ```python import random def gcd(a, b): while b != 0: a, b = b, a % b return a def pollard_rho(n): x = random.randint(1, n-1) y = x c = random.randint(1, n-1) d = 1 while d == 1: x = (x ** 2 + c) % n y = (y ** 2 + c) % n y = (y ** 2 + c) % n d = gcd(abs(x - y), n) if d == n: return pollard_rho(n) return d def factorize(n): factors = [] while n > 1: factor = pollard_rho(n) factors.append(factor) n //= factor return factors n = 1234567890 factors = factorize(n) print(factors) ``` 在这个代码中,我们使用了 Pollard Rho 算法进行因式分解。首先,我们定义了一个辗转相除法的函数 gcd(a, b),用于求两个数的最大公约数。然后,我们定义了一个 pollard_rho(n) 函数,该函数接受一个正整数 n 作为参数,并返回 n 的一个因子。该函数通过随机选择 x 和 c,然后使用 f(x) = x^2 + c 的迭代公式来产生一个序列 x_0, x_1, x_2, ...,并使用 Floyd 算法来寻找序列中的循环节,最后找到两个序列中的相同元素并计算它们的差的绝对值和 n 的最大公约数,如果这个最大公约数不是 1 或 n,则表示我们已经找到了 n 的一个因子。如果这个最大公约数是 1 或 n,则需要重新选取 x 和 c,进行迭代。最后,我们定义了一个 factorize(n) 函数,该函数接受一个正整数 n 作为参数,并返回 n 的所有因子,该函数通过重复调用 pollard_rho(n) 函数来实现。最后,我们测试了这个函数,并输出了 n 的所有因子。 希望这个代码对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值