您的位置:首页 > 其它

素数判断和素数筛法

2016-01-29 17:03 260 查看
素数的判断:

bool isPrime(long long n)  

{  

    int lim = floor( sqrt(n * 1.0 + 0.5) );  

    for (int i = 2; i <= lim; i++) {  

        if (n % i == 0) {  

            return false;  

        }  

    }  

    return true;  

}

素数筛法:

const int MAXV = 100; //素数表范围  

bool flag[MAXV+1]; //标志一个数是否为素数  

int prime[MAXV+1]; //素数表,下标从0开始  

int size=0; //素数个数  

void genPrime(int max)  

{  

    memset(flag, true, sizeof(flag));//首先对标签数组进行初始化,全部设为true。  

    for(int i = 2; i <= max / 2; i++)  

    {  

        /* 

        从2开始,删除2的倍数 

        */  

        if(flag[i])  

        {  

            //j=i<<1等价于 j=i*2,即j是i的两倍,而最后的j+=i,则表示下一个循环j是i的3倍,接着4倍。。。

            //i的所有2~N倍数肯定都不是素数,因此将flag置为0,直到最后一位。

            for(int j = i << 1 ; j <= max; j += i)

            {  

                flag[j] = false;  

            }  

        }  

    }  

    for(int i = 2 ; i <= max; i++)  

    {  

        if(flag[i])  

        {  

            prime[size++] = i;//存储素数。将所有标志位依然为1的标志写入素数数组中去。  

        }  

    }  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: