我爱普洱茶 发表于 2024-12-9 14:46:45

普通算法——埃氏筛

埃氏筛

用于更加速速的求素数
思路:


[*]创建一个划一大小的bool数组
[*]先判断i有没有被筛掉
[*]若没有,则以i基数依次筛掉含有该因数i的数,即st = true;
#include <iostream>
#include <ctime>
using namespace std;

const int N = 1e7;

bool st = { false };

int main()
{
        double e = clock();
        int count = 0;
        int pp = 0;
        //埃氏筛法:50ms
        for (int i = 2; i <= N / i; i++) {
                if (!st) {
                        for (int j = i * i; j < N; j += i) st = true;
                }
        }
        for (int i = 2; i < N; i++)
        if (!st) count++;
        //普通筛法:806ms
        /*for (int i = 2; i < N; i++) {
                if (is_Prime(i)) count++;
        }*/
        //欧拉筛法:43ms
        /*int primes;
        for (int i = 2; i <= N; i++) {
                if (!st) primes = i, count++;
                for (int j = 0; i * primes <= N; j++) {
                        st * i] = true;
                        if (i % primes == 0) break;
                }
        }*/
        double s = clock();
        cout << count << endl << s - e;
}

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 普通算法——埃氏筛