关于欧拉筛求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)。
如果当前的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)。
相关文章推荐
- MySQL常见性能命令
- MySQL数据库服务器优化详细
- STM32f746G-DISCO开发使用
- 按钮也能随单机变化(ImageButton选择特效)
- 计算指定时间与当前的时间差
- innodb_flush_log_at_trx_commit
- mysql索引总结
- Cannot proceed with delivery: an existing transporter instance is currently uploading this package
- Autoconf/Automake工具简介
- Ajax异步交互 [异步对象连接服务器]
- 自动查询友链(普通链接也行)机器人
- java----会动的方块
- mysql分表和表分区详解
- spring 配置文件中dbcp连接池,jdbc连接池 引入 配置文件properties,但是不能用$符号引用里面的变量问题
- 几个容器
- 机器学习之初生牛犊
- Kobuki(turtlebot底盘)通信方式
- java关键字之我见
- The mbstring extension is missing. Please check your PHP configuration.
- C、C++中的隐式转换和显示转换