方法一:愚蠢型
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;
}