This paper解释了pollard p-1分解算法。当找到的因素等于我们返回的输入并改变'a'(基本上是上述论文中的第2点第2点)时,我无法理解这种情况。Pollard的p-1算法理解berkley纸
- 为什么我们回去增加'a'?
- 为什么我们不继续并继续递增阶乘?这是因为我们继续进入我们已经看到的相同周期?
我可以使用相同的算法得到所有的因素吗?如49000 = 2^3 * 5^3 * 7^2。目前我只能得到7和7000.也许我可以递归地使用这个get_factor()函数,但我想知道基本情况。
def gcd(a, b): if not b: return a return gcd(b, a%b) def get_factor(input): a = 2 for factorial in range(2, input-1): '''we are not calculating factorial as anyway we need to find out the gcd with n so we do mod n and we also use previously calculate factorial''' a = a**factorial % input factor = gcd(a - 1, input) if factor == 1: continue elif factor == input: a += 1 elif factor > 1: return factor n = 10001077 p = get_factor(n) q = n/p print("factors of", n, "are", p, "and", q)
您在答案中链接的链接不谈论平滑度。你可能会添加一些关于'L'计算方法的描述,并添加一些关于平滑边界的链接。我会在阅读完这些答案后标记这个答案。 –
“不到一个界限B1”是平滑的概念。我将L计算为小于界限的最小公倍数。您的链接首先将L作为_p_ - 1的倍数,这是未详细说明的。稍后,您的链接将L作为所有小于R的数字的乘积,这是过度规定的。 – user448810
B1未正确选择会失败此算法?在这种情况下,应该使用步骤2。我认为你正在计算素数并将其提高到某种程度(根据链接的url),以便它小于界限值,并查看输入数字的该数字的gcd是否大于1. –