两种筛法比较

来源:互联网 发布:阿里云ntp服务器 编辑:程序博客网 时间:2024/06/05 23:59

   看我两种筛法:

#include<iostream>#include<vector>#include<cmath>#include<cstring>using namespace std;int n,m,primes[110],isprime[110],cnt=0;int shaifa_1(){int i,j;for(i=2;i<=n;i++){if(!isprime[i])primes[cnt++]=i;for(j=i*i;j<=n;j+=i) //如果i是1000000时,j可能超过int范围,看题目数据范围,小心 j 溢出 ,我就遇到过这个坑 isprime[j]=-1;}for(i=0;i<cnt;i++)cout<<primes[i]<<" ";cout<<endl;}int shaifa_2(){int i,j;m=sqrt(n)+1;//区别 1 for(i=2;i<=m;i++){   //区别 2 :  i<=m if(!isprime[i])primes[cnt++]=i;for(j=i*i;j<=n;j+=i)isprime[j]=-1;}for(i=m+1;i<=n;i++){  //多了这一块 if(!isprime[i])primes[cnt++]=i;}for(i=0;i<cnt;i++)cout<<primes[i]<<" ";cout<<endl;}int main(){memset(isprime,0,sizeof(isprime));cin>>n;//shaifa_1(); shaifa_2(); //两种结果一样,第二种速度快一点 ,推荐 shaifa_2return 0;}

1 0
原创粉丝点击