素数筛
bool isPrime(int x) { if(n<=1) return false; for(int i=2;i<=(int)sqrt(x);i++) { if(x%i==0) return false; } return true; }
对于一个正整数n,如果他存在1和本身以外的因子,一定是在sqrt(n)左右成对出现。
利用以上函数,对数字直接进行判断,可以获得素数,这是普通的方法
如果x的范围比较小,i*i不会溢出int的范围,可以使用下面的代码
bool isPrime(int x) { if(n<=1) return false; for(int i=2;i*i<=x;i++) { if(x%i==0) return false; } return true; }
下面介绍更快的方法
素数筛法
2是素数,2的所有倍数就都可以判断为非素数
如果一个数n不是素数,那么它一定有素因子,所以在判断其素因子的时候就已经将这个数n否决了。
bool prim[MAXN]={false};//false为素数 int prime[MAXN]={0};
void Find_Prime(int n)//n是范围 { for(int i=2;i<n;i++) { if(prim[i]==false) { // for(int j=2;j*i<n;j++) // prime[j]=true; for(int j=i+i;j<n;j=j+i) prim[j]=true; } } }