素数筛

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;
        }
    }
}

 

posted @ 2020-03-16 15:58  ecnu_lxz  阅读(136)  评论(0编辑  收藏  举报