素数筛

来源:互联网 发布:显卡驱动负优化 编辑:程序博客网 时间:2024/06/10 02:57
偶遇素数筛 - - 决定必须秒它 - -
首先我们必须明确几点:
素数就是质数 , 而且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;     }}



原创粉丝点击