数学基础素数线性筛法--欧拉筛法模板普通筛法的优化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了 数学基础素数线性筛法--欧拉筛法模板普通筛法的优化相关的知识,希望对你有一定的参考价值。

质数(素数):指大于1的所有自然数中,除了1和自身,不能被其它自然数整除的数

合数:比1大,但不是素数的数称为合数,合数除了被1和自身整除,还能被其它数整除

质因数(素因数或质因子):能整除给定正整数的质数,除1以外,两个没有其它共同质因子的正整数称为互质

1和0既非素数又非合数

素数筛法原理:素数的倍数一定不是素数。

实现步骤:用一个boook数组对maxn内的所有数进行标记,1为合数,0为素数,book初始化为0是假设全部数都为素数,从第一个素数2开始,把2的倍数标记为1,然后继续下一轮

欧拉筛法与普通筛法比较,优化之处在于每个合数不会被重复标记,时间复杂度和空间复杂度均为o(n)

 

#define maxn 100005
#define maxl 1299710
int prime[maxn],book[maxl];
void prime()
{
    int i,sum=0,j;
    memset(book,0,sizeof(book));
    for(i = 2; i < 2500000; i ++)
    {
        if(!book[i])
            prime[sum++] = i;
        for(j = 0; j < sum; j ++)//保证合数只会被它的最小质因数筛去 ,因此每个数只会被筛去一次 
        {
            if(i*prime[j] >= maxl)
                break;
            book[i*prime[j]] = 1;
            if(i%prime[j] == 0)
                break;
        }
    }
    return;
}

 

以上是关于 数学基础素数线性筛法--欧拉筛法模板普通筛法的优化的主要内容,如果未能解决你的问题,请参考以下文章

线性筛法(欧拉筛法)求素数

欧拉筛法(线性筛)素数

欧拉筛法

线性筛素数-欧拉筛法

算法模板:数论之质数全家桶(内含埃氏筛法,欧拉线性筛法详解)沈七

第四章 数学知识