您的位置:首页 > 其它

关于欧拉筛求phi的讨论

2016-03-04 22:07 176 查看
对于任意正整数i,我们将其所有的质数(p)倍筛去。

如果当前的p已经是i的约数,那么之后的数 p*i中, p一定不是p*i的最小质因子。

每个合数只会被其最小质因子筛去一次,所以时间复杂度为O(N)。

若i为质数:ϕ(i)=i−1

若i的最小质因子指数为1:根据ϕ(ab)=ϕ(a)ϕ(b)(a,b互质)可知,ϕ(i∗p)=ϕ(i)∗ϕ(p)

若i的最小质因子指数大于1(即当前p为i∗p的最小质因子,且p整除i):ϕ(i∗p)=ϕ(i)∗p,下面给出证明。

已知p|i,且p为质数,求证ϕ(i∗p)=ϕ(i)∗p

证明:

因为p|i,则令m=i/p,即i=mp

则ϕ(i∗p)=ϕ(mp2),且m与p互质

所以ϕ(mp2)=ϕ(m)∗ϕ(p2)=ϕ(m)∗(p−1)p

又因p为质数,ϕ(m)∗(p−1)p=ϕ(m)∗ϕ(p)∗p=ϕ(mp)∗p

即ϕ(i∗p)=ϕ(i)∗p,证毕。

每个数只会被它的最小质因子筛一次,时间复杂度为O(n)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: