埃拉托斯特尼筛法找质数

C语言代码:

// 筛选出小于等于n的质数
for (i = 2; i * i <= n; i++)
{
    if (a[i] == -1)
        continue;
    for (k = i; k * i < n; k++)
    {
        if (a[k * i] == -1)
            continue;
        a[k * i] = -1;
    }
}

分析

假设数列为:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16···

那么,该函数第一次就会把2的倍数都置为-1,第二次吧3的倍数置为-1,···,直到 i * i 的值大于 n,此时,很容易理解,原数列中所有合数都被置为-1,质数自然就被筛选了出来。

posted @ 2020-10-01 00:01  模糊计算士  阅读(256)  评论(0编辑  收藏  举报