【转】素数判断四方法

方法一:愚蠢型

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

方法二:聪明了点

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"<else cout<<"NO"<

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

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

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

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;jif(i*prime[j]>MAXN)
            break;//过大,推出
            check[i*prime[j]]=1;
            if(i%prime[j]==0)
            break;
        }
    }
    for(int i=0;i

你可能感兴趣的:(一点一滴的积累)