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,质数自然就被筛选了出来。