【算法】- 【素数筛】欧式筛(常用)

素数筛(欧式筛)

欧式筛(欧几里得筛法)
这个方法可以保证每个合数在N/M的最小素因子时被筛出,所以时间复杂度仅为O(N)
已经可以满足大部分需求,在竞赛中,这种方法也可以在极短的时间内求出关于N的质数表。
思想:最小质因数 * 最大因数(非自己) = 这个合数

代码

#include <stdio.h>
#include <string.h>
bool book[10000005];
int prime[10000005], p = 0;
int isPrime(int n)
{
    memset(book,true,sizeof(book));
    book[0] = false;
    book[1] = false;
    for(int i = 2; i <= n; ++ i){
        if(book[i]){
            prime[p ++] = i;
        }
        for(int j = 0; j < p && prime[j] * i <= n; ++ j){
            book[prime[j] * i] = false;
            if(!i % prime[j]){
                break;
            }
        }
    }
    return book[10000005];
}

批注

注意这里关于素数筛(欧式筛)的使用(函数部分)

注意bool类型在C++当中才有,C中没有

注意memset函数的头文件为<string.h>

发布了34 篇原创文章 · 获赞 2 · 访问量 907

猜你喜欢

转载自blog.csdn.net/Kapo1/article/details/103522102