判断一个数是不是素数的高效率
素数有一个规律:
任何素数都在6的倍数的两侧,就是素数应满足6x+1,6(x-1)+1;但是不是这样的数都是素数;
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
bool zhishu(int num)
{
if(num==3||num==2)
{
return 1;
}
if(num==1)
{
return 0;
}
if(num%6!=1&&num%6!=5)
{
return 0;
}
for(int i=5; i<=sqrt(num); i=i+6)
{
if(num%i==0||num%(i+2)==0)
{
return 0;
}
}
return 1;
}
int main()
{
int num;
scanf("%d",&num);
int sum=0;
for(int i=1; i<=num; i++)
{
if(zhishu(i)==1)
{
sum++;
}
}
printf("%d\n",sum);
}
判断一个数范围内有多少个素数:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#define Max 10000000
bool a[Max+1];
using namespace std;
int main()
{
memset(a,true,sizeof(a));
a[0]=false;
a[1]=false;
a[2]=true;
for(long long int i=2;i*i<=Max;i++)
{
if(a[i])
{
for(long long int j=i+i;j<=Max;j=j+i)
{
a[j]=false;
}
}
}
int sum=0;
for(long long int k=2;k<=Max;k++)
{
if(a[k])
{
sum++;
}
}
printf("%d\n",sum);
}