我们以前判断素数是从2到这个数的平方根一直检查是否是素数。
#include<iostream>
#include<cstring>
#include<stack>
#include<cstdio>
using namespace std;
int main()
{
int n,i,f=0;
scanf("%d",&n);
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
f=1;
break;
}
}
if(f==1)printf("YES\n");
else printf("NO\n");
}
现在如果数很大的话我们可以把每个数的倍数去掉就行了,剩下的就全是素数。
#include<iostream>
#include<stack>
#include<cstring>
#include<cstdio>
int a[2000005];
using namespace std;
int main()
{
int n,i,j;
for(i=2;i<=2000000;i++)
{
if(a[i]==0)
{
for(j=i+i;j<=2000000;j+=i)
{
a[j]=1;
}
}
}
while(scanf("%d",&n)&&n!=0)
{
for(i=2;i<=n;i++)
{
if(a[i]==0)printf("%d ",i);
}
printf("\n");
}
}
因为我们把所有的是倍数的数去掉了,所以剩下的就都是素数。