枚举n以内素数的个数
#include<stdio.h>
#include<string.h>
#include<math.h>
#define Max 1000000
int prime[Max];
bool isprime[Max+1];
int sieve(int n)//返回n以内素数个数
{
int p=0;
memset(isprime,true,sizeof(isprime));
isprime[0]=false,isprime[1]=false;
int m=sqrt(n)+1;
for(int i=2;i<=m;i++)
{
if(isprime[i])
{
prime[p++]=i;
for(int j=i*i;j<=n;j+=i)
{
isprime[j]=false;
}
}
}
return p;
}
int main()
{
int i,n,m;
while(scanf("%d",&n)!=EOF)
{
m=sieve(n);
printf("%d\n",sieve(n));
for(i=0;i<m;i++)//n以内素数
{
printf("%d ",prime[i]);
}
printf("\n");
}
return 0;
}
判断素数
/*只适合数据组数少情况*/
#include<stdio.h>
#include<math.h>
bool isprime(long long int num)
{
if(num==2||num==3)//特殊情况
return 1;
if(num%6!=1&&num%6!=5)//不在6的倍数两侧的一定不是质数
return 0;
int tmp=sqrt(num);//emmm,在两侧的也不一定是,进行判断
for(int i=5;i<=tmp;i+=6)
{
if(num%i==0||num%(i+2)==0)
return 0;
}
return 1;//排除所有,最后就能确定是素数了
}
int main()
{
long long int i,j,m,n;
while(scanf("%lld",&n)!=EOF)
{
if(isprime(n))
printf("Yes\n");
else
printf("No\n");
}
return 0;
}