首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速因式分解

快速因式分解
EN

Stack Overflow用户
提问于 2012-04-27 16:18:30
回答 2查看 503关注 0票数 6

给定数n的

(我们知道n= p^a * q^ b,对于一些素数p,q和一些整数a,b)和给定数φ(n) ( http://en.wikipedia.org/wiki/Euler%27s_totient_function )找到p,q,a和b。

问题是n和φ(n)大约有200位数字,所以算法必须非常快。这似乎是一个非常困难的问题,我完全不知道如何使用φ(n)。

怎么处理这个?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-27 17:01:47

n = p^a * q^b来说,最重要的是φ(n) = (p-1)*p^(a-1) * (q-1)*q^(b-1)。没有失去一般性,p < q

因此,如果gcd(n,φ(n)) = p^(a-1) * q^(b-1) p不除以q-1,则为gcd(n,φ(n)) = p^a * q^(b-1),如果p除以q-1,则为p

在第一个例子中,我们有n/gcd(n,φ(n)) = p*qφ(n)/gcd(n,φ(n)) = (p-1)*(q-1) = p*q + 1 - (p+q),因此有x = p*q = n/gcd(n,φ(n))y = p+q = n/gcd(n,φ(n)) + 1 - φ(n)/gcd(n,φ(n))。那么找到pq很简单:y^2 - 4*x = (q-p)^2,所以q = (y + sqrt(y^2 - 4*x))/2p = y-q。那么找到指数ab是很简单的。

在第二种情况下,n/gcd(n,φ(n)) = q。然后,您可以很容易地找到指数b,除以q,直到除以余数,从而得到p^a。将φ(n)除以(q-1)*q^(b-1),您将得到z = (p-1)*p^(a-1)。然后是p^a - z = p^(a-1)p = p^a/(p^a-z)。找到指数a同样是微不足道的。

所以还是要决定你有哪一个案子。你有案例2当且仅当n/gcd(n,φ(n))是素数。

为此,你需要一个像样的原始性测试。或者你可以先假设你有案例1,如果不成功,你可以得出结论,你有案例2。

票数 6
EN

Stack Overflow用户

发布于 2012-04-27 16:30:37

试着找出n/ (n -φ(n))是什么。

后续行动:

N/ (n -φ(n)) = pq。你就一直用pq除以n。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10354278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档