关于欧拉筛的一些想法
2017-08-19 16:26
288 查看
欧拉筛:
保证每个合数只会被它最小的质因子筛去,所以欧拉筛复杂度为o(n);
原因:
prime[]数组中的素数是递增的,当i能整除prime[j],那么i*prime[j+1]这个合数肯定被prime[j]乘以某个数筛掉;
因为i中含有prime[j],prime[j]比prime[j+1]小,即i=k*prime[j],那么i*prime[j+1]=(k*prime[j])*prime
[j+1]=k’*prime[j],接下去的素数同理。所以不用筛下去了。因此,在满足i%prime[j]==0这个条件之前以及第一次满足改条件时,prime[j]必定是prime[j]*i的最小因子。
来自:http://www.cnblogs.com/zhuohan123/p/3233011.html;
void euler(int n) { isprime[1]=true; for(int i=2;i<=n;i++) { if(!isprime[i]) prime[++tot]=i; for(int j=1;j<=tot && i*prime[j]<=n;j++) { isprime[i*prime[j]]=true; if(i%prime[j]==0) break;//神奇的代码 } } }
if(i%prime[j]==0) break;
保证每个合数只会被它最小的质因子筛去,所以欧拉筛复杂度为o(n);
原因:
prime[]数组中的素数是递增的,当i能整除prime[j],那么i*prime[j+1]这个合数肯定被prime[j]乘以某个数筛掉;
因为i中含有prime[j],prime[j]比prime[j+1]小,即i=k*prime[j],那么i*prime[j+1]=(k*prime[j])*prime
[j+1]=k’*prime[j],接下去的素数同理。所以不用筛下去了。因此,在满足i%prime[j]==0这个条件之前以及第一次满足改条件时,prime[j]必定是prime[j]*i的最小因子。
来自:http://www.cnblogs.com/zhuohan123/p/3233011.html;
相关文章推荐
- 关于软件国际化与本地化的一些想法
- 关于数据库的一些疯狂想法
- 关于图像检索方面的一些怪想法
- 关于电话营销的一些不太成熟的想法
- 关于PE文件的一些想法
- 一些想法:关于地图
- 关于Sphinx引擎的一些想法
- 关于魔兽世界战斗系统设计的一些想法
- 关于UML使用和学习的一些想法
- 关于扩展Google Map API的一些想法
- 关于汉字字库与结构体的一些想法(未完待续)
- 关于redis和memcached的一些想法
- 关于可变式分区存储管理的一些想法
- 关于SEO的一些想法和经验的分享
- 关于一些误解黑盒测试想法的论述
- 关于OGRE官方demos的一些想法
- 关于算法的一些想法
- 【JAVA教程】关于增强visualvm的一些想法
- 关于onbeforeunload的一些想法
- 关于特性回收的一些想法