质数筛法的代码优化极限
2017-03-24 22:39
197 查看
我敢打包票,我刚刚写的这个
质数筛法,求取范围区间 的质数(素数)个数,效率可以的~ 代码贴上。
对了,若是可以再牺牲点空间和内存,还可以进一步优化成 对数log,但对这个数量级的数据来说,这点效率的区别差别并不是很大。
质数筛法,求取范围区间 的质数(素数)个数,效率可以的~ 代码贴上。
对了,若是可以再牺牲点空间和内存,还可以进一步优化成 对数log,但对这个数量级的数据来说,这点效率的区别差别并不是很大。
#include <bits/stdc++.h> using namespace std; //质数筛法的优化极限 int const N = 100000000 + 3 ; bool disPrime[ N ] = { true, true, false } ; void setPrime( ){ int i=0, j=0 ; for( i=4; i<N; ++i ) // 先把一般数量的偶数筛掉,不要通过 条件语句%2来判断是否为合数。。要直接用! disPrime[ i++ ] = true ; // 而且还可以把 i+=2; 改为++i 和 i++两条语句,没了赋值语句会更快。 for( i=3; i*i<=N ; ++i ) if ( ! disPrime[ i ] ) // 此时的 i 为 不是 非质数, 也就是质数了。。。且保证未被筛过(避免重复筛选) for( j = i*i ; j < N ; j += i ) // 第二个for循环语句放在if条件语句里,避免重复筛选 if( ! disPrime[ j ]) //避免重复复制,判断语句比复制拷贝要省时 disPrime[ j ] = true ; }// 一举三得:1、故可以得出范围 2 ~ N 的质数个数为 prime.size() 2、也可以输出各个具体的质数 3、还可以单独用 disPrime[] 判断是否为质数。 int main(){ setPrime() ; int num, Count ; while( scanf("%d",&num) != EOF ){ Count = 0; for( int i=0; i <= num ; ++i ) if( ! disPrime[ i ]) Count ++; printf("Count = %d\n",Count) ; } return 0 ; }
相关文章推荐
- java编程查找质数代码优化
- 常数优化的筛法求N以内素数表(附C语言、Java代码)
- 代码优化-之-Base64编码函数的极限优化挑战
- 代码优化-之-Base64编码函数的极限优化挑战
- SDK代码的优化和消息机制的进一步学习
- 优化代码-变量的优化(zt)
- 用Eratosthenes筛法查找质数
- C#开发小技巧--对Text控件增量赋值的代码优化
- HTML 代码优化技巧
- 运用 ADO.NET 对象优化数据查询代码
- 优化代码时要选用正确的测试方法
- 怎样优化Pentium系列处理器的代码 From:http://www.codingnow.com/2000/download/pentopt.htm#26_14
- 怎样优化Pentium系列处理器的代码
- C++代码优化Tips
- 将XSD文件转换成XML文件的源码,望高手优化代码
- 不更改代码的情况下如何优化数据库系统
- 32位代码优化常识
- 优化代码,看看哪个执行速度更快!!!
- C++代码优化
- 在即将离开工作了四年的软件业前[zt,一位前辈关于代码优化的总结]