高效的求取100以内的质数
2015-05-11 15:29
274 查看
求取100以内的质数,常见的做法就是双重循环,内层循环的终值为外层循环值的二次方根值,若两数一直不能够整除,则为质数。但两层循环在数据量较大时,效率极低。现提供另外一种思路:
参考:
http://news.csdn.net/article.html?arcid=15823934&preview=1
<span style="font-size:18px;">#include<iostream> #include<math.h> using namespace std; int main() { //质数只可能从奇数总产生,故若判断100以内的质数,只需用50的布尔数组来存储各个奇数的判断结果 bool IsNotPrime[50]={0}; //存储质数的判断结果,IsNotPrime[i]=false,则i*2+1为质数 IsNotPrime[0]=true; double sqrtnum=(sqrt(100)-1)/2; //100以内的非质数,其因数必有一个小于根号100的,再转换成其数组编号 int a; int primecount=0; cout<<2<<"\t"<<' '; primecount++; for(a=1;a<=(int)sqrtnum;++a) { bool flag=IsNotPrime[a]; if(!flag) { int prime=a*2+1; cout<<prime<<"\t"<<' '; primecount++; int i=3; int notprime=prime*i; while(notprime<=100) { IsNotPrime[(notprime-1)/2]=true; i=i+2; notprime=prime*i; } } } for(int a=(int)(sqrtnum+1);a<50;++a) { bool tempflag=IsNotPrime[a]; if(!tempflag) { primecount++; int prime=a*2+1; cout<<prime<<"\t"<<' '; } } cout<<"primecount "<<primecount<<endl; return 0; } </span>
参考:
http://news.csdn.net/article.html?arcid=15823934&preview=1
相关文章推荐
- 输出100以内的质数
- C语言打印100以内的质数
- 求100以内的质数
- 用for编写100以内所有的质数
- Javascript 求100以内的质数
- 输出1-100 以内的质数Quality3
- 使用python实现打印所有100以内的所有质数
- python实现100以内的质数和非质数
- SQL计算100以内的质数(可以把100换成任意的整数)
- 列出100以内的质数
- 打印100以内的素数(质数)----C++实现、python实现
- 编写一个找出100以内质数的程序
- 100以内质数的算法
- SQL计算100以内的质数(可以把100换成任意的整数)
- java + 100以内的素数(质数)
- 查找100以内的质数C;
- python输出100以内的质数与合数实例代码
- 求100以内的质数
- 返回100以内的质数
- 100以内的质数及100以内质数的和