埃氏筛(求素数)

众多筛法中最简单且容易理解的一种,时间复杂度为O(nloglogn),在找到一个素数后,马上将所求范围内该素数的倍数标记为合数。埃氏筛法存在的问题是会对同一合数进行多次标记,从而影响效率。

const int maxn = 101;   // 表长
int prime[maxn], pNum = 0;  // prime存放素数,pNum为素数个数
bool p[maxn] = {false};     // 标记,素数false,合数true

void eratosthenesSieve(int n)
{
    for (int i = 2; i <= n; i++)
    {
        if (p[i] == false)      // 如果i是素数
        {
            prime[pNum++] = i;  // 记录i
            for (int j = i + i; j <= n; j += i)     // 筛去所有i的倍数
                p[j] = true;
        }
    }
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容