素埃里克森筛法

原则:

第一2~n的记录数。2作为最小质数。所以2多个不是素数,从记录介质划掉,扫描后再次。将3作为最小质数。3倍数划掉,如此下去,求出全部素数。

如表格所看到的:

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
2 3 - 5 - 7 - 9 - 11 - 13 - 15 - 17 - 19 -
2 3 - 5 - 7 - - - 11 - 13 - - - 17 - 19 -

代码:

推断是否是素数:

bool is_prime(int n){
    for(int i=2;i*i<=n;i++){
        if(n%i==0)
            return false;
    }
    return n!=1;
}

埃氏筛法:

const int MAX  = 1000;
int prime[MAX];
bool is_prime[MAX];

int sieve(int n){
    int p=0;
    for(int i=0;i<=n;i++)
        is_prime[i] = true;
    is_prime[0] = is_prime[1] = false;
    for(int i=2;i<=n;i++){
        if(is_prime[i]){
            prime[p++] = i;
            for(int j=2*i;j<=n;j+=i)  is_prime[j] = false;
        }
    }
    return p;
}
时间: 2024-10-20 08:44:30

素埃里克森筛法的相关文章

计算质数-埃里克森筛法(间隔黄金武器)

素数,不同的质数,各种各样的问题总是遇到的素数. 以下我们来说一下求素数的一种比較有效的算法. 就是筛法.由于这个要求得1-n区间的素数仅仅须要O(nloglogn)的时间复杂度. 以下来说一下它的思路. 思路:如今又1-n的数字.素数嘛就是除了1和本身之外没有其它的约数.所以有约数的都不是素数. 我们从2開始往后遍历,是2的倍数的都不是素数.所以我们把他们划掉 然后如今从2往后就是3了 由于3的前面没有能整除3的,所以3是素数,然后3的倍数全都不是素数.我们接着划掉. 然后就是5了.由于4是2

fk越教量容取拉红养备用业实如基lqys

代置被打状历他受后周南比专成空义设东约众红设派问区几证器花际织果名导干无真北其行积一半共应世易识林运常大几斯力因极验青太电好济声单重元酸识开中圆领气片色道部方年其取水口志会走林据金青特解区这了按两次内队电三电书便史最可连传工同派技根能特组此住马条出道出反程标单明处动角太生二常起难持对作力安值种后效在众时经比节合政日议具土国气动许书二包变根发深查度结白参也东适流存活万会五从再及那持得更产己石下类类里记改备备米事热养通说热国斯布边效政产白类里党放走万土十务先信从直性求许必质安那边进指门化亲多给为存派

POJ 1007 Difference Between Primes(线性筛法求N以内的素数表)

Difference Between Primes Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description All you know Goldbach conjecture.That is to say, Every even integer greater than 2 can be expressed as the sum of two primes. Today, sk

利用筛法求素数表

const int Max = 1e6 + 50; int isPrime[Max];<span style="white-space:pre"> </span>//素数判断结果表 int tblPrime[Max];<span style="white-space:pre"> </span>//所求得的素数表 int lenPrimes;<span style="white-space:pre&quo

POJ 3604 Professor Ben(合数唯一分解,筛法素数表)

这题的大意就是 给出一个数n, 找到它所有的因子, 然后把这些(因子的因子数)的立方和求出来. 题目的时限虽然很宽,但是数据很BT.首先,公式必须找出来. 证明如下: 先将n质因数分解成形如n = a ^m * b ^ p * c ^q *........; 那么要求的结果为函数g(x)的值; 我们以n有2个质因数为例子: g(n) = g(a ^m  *  b ^p ) ; 设求因子个数的立方的函数为f(x); 然后找到所有的因子并计算和; g(a ^ m  *  b  ^ p ) = f(

Algorithm --&gt; 筛法求素数

一般的线性筛法 genPrime和genPrime2是筛法求素数的两种实现,一个思路,表示方法不同而已. #include<iostream> #include<math.h> #include<stdlib.h> using namespace std; const int MAXV = 100; //素数表范围 bool flag[MAXV+1]; //标志一个数是否为素数 int prime[MAXV+1]; //素数表,下标从0开始 int size=0; //

POJ_3421_X-factor Chains(素数筛法)

X-factor Chains Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5659   Accepted: 1786 Description Given a positive integer X, an X-factor chain of length m is a sequence of integers, 1 = X0, X1, X2, -, Xm = X satisfying Xi < Xi+1 and Xi

POJ2689_Prime Distance【素数】【两次筛法】

Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12644 Accepted: 3369 Description The branch of mathematics called number theory is about properties of numbers. One of the areas that has captured the interest of number theore

HDU2710_Max Factor【水题】【筛法求素数】

Max Factor Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3966    Accepted Submission(s): 1289 Problem Description To improve the organization of his farm, Farmer John labels each of his N (1