【转】素数判断四方法

来源:互联网 发布:日式风格的房间知乎 编辑:程序博客网 时间:2024/05/22 15:08

方法一:愚蠢型

int i,n;while(cin>>n){    for(i=2;i;i++)    {     if(n%i==0)     {        break;     }   }   if(i==n) cout<<"YES"<<endl;    else cout<<"NO"<<endl;}

方法二:聪明了点

int i,n;while(cin>>n){    int x=(int)sqrt(n);//减少一些运算    for(i=2;i<=x;i++)    {     if(n%i==0)     {        break;     }   }   if(i>x) cout<<"YES"<<endl;    else cout<<"NO"<<endl;}

方法三:埃拉托斯特尼筛选法,挺好记

const int MAXN=10000;bool check[MAXN];int prime[MAXN];int n,count;while(cin>>n){    count =0;    memset(check,0,sizeof(check));    for(int i=2;i<=n;i++)    {        if(!check[i])        prime[count++]=i;        for(int j=i+i;j<=n;j+=i)//注意细节        check[j]=1;//core    }    for(int i=0;i<count;i++)    cout<<prime[i]<<endl; } 

方法四:线性筛选/欧拉筛选法

const int MAXN=10000;bool check[MAXN];int prime[MAXN];int n,count;while(cin>>n){    count =0;    memset(check,0,sizeof(check));    for(int i=2;i<=n;i++)    {        if(!check[i])        prime[count++]=i;        for(int j=0;j<count;j++)        {            if(i*prime[j]>MAXN)            break;//过大,推出            check[i*prime[j]]=1;            if(i%prime[j]==0)            break;        }    }    for(int i=0;i<count;i++)    cout<<prime[i]<<endl; } 
原创粉丝点击