偶遇素数筛 - - 决定必须秒它 - -
首先我们必须明确几点:
素数就是质数 , 而且0,1 都不是素数.
开始晒吧- -...
Firstly,偶数一定不是素数故此先把偶数晒去
for( i = 3 ; i <= n; i ++ ){
prime[ i ] = i % 2 == 0 ? 0:1;
}
第一个奇数不是素数的为 9 ,而9正好是3^2 故此我们从3开始遍历.因为 奇数 + 奇数 = 偶数 而偶数必然是素数,故此我们的 j += 奇数*2.因为奇数 + 偶数 = 奇数. 为啥 t 要 sqrt
一下呢,是因为 81 = 3 * 27 和 81
= 27 * 3是一样的,既然3的27倍依然被削去了,所以27的3倍就没必要再一次削去,节省点时间复杂度么!
int t = ( int ) sqrt( (double) n );
for( i = 3 ; i <= t ; i++ ){
if( prime[ i ] ){
for( j = i * i ; j < n ; j += i * 2)
prime[ j ] = 0;
}
}