素数判定
一、简单易懂普遍的方法
int prime(int x)//不考虑x<=1
{
double j=sqrt(x);
if(x<3)
return 1;
else
{
for(int i=2;i<=j;i++)
if(x%i==0)
break;
if(i<=j)
return 0;
else
return 1;
}
}
二、埃拉托斯特尼筛法
用来找一定范围内所有的素数。
用已经筛选出来的素数去过滤所有能够被它整除的数。这些素数就像是筛子一样去过滤自然数,最后被筛剩下的数自然就是不能被前面素数整除的数,根据素数的定义,这些剩下的数也是素数。
int flag[10000];//找到10000以内的素数
for(int i=0;i<10000;i++)
flag[i]=1;
void prime(int maxn)//maxn为数组元素个数
{
flag[0]=0;
flag[1]=0;//0,1都不是素数
for(int i=2;i<maxn;i++)
{
if(flag[i])
for(int j=i*i;j<=maxn;j+=i)
flag[j]=0;
}
}//埃氏筛法时间复杂度为O(n*loglogn)