用压缩筛选法求 1 ~ MAX_NUMBER 内的所有质数
基于 John Moyer (jrm@rsok.com) 的 sieve2310 (http://www.rsok.com/~jrm/printprimes.html) 算法改写
原理: 考虑 30 = 2*3*5, 对任意非负整数N(即N>=0), 显然
1. N*30 + 2*x (x = [0, 15]) 都能被2整除
2. N*30 + 3*x (x = [0, 10]) 都能被3整除
3. N*30 + 5*x (x = [0, 6]) 都能被5整除
因此, 除去2, 3, 5的倍数后, N*30+0 ~ N*30+29 这30个数中, 只有
N*30+1, N*30+7, N*30+11, N*30+13, N*30+17, N*30+19, N*30+23, N*30+29
这8个数可能是质数. 也就是说, 30个整数只需要8个Bit就可以表示所有可能的质数
依此类推, 当 2310 = 2*3*5*7*11 时, 所有可能的质数为
N*2310+1, N*2310+13, N*2310+17, ..., N*2310+13*13, N*2310+13*17, ..., N*2310+2309
共480个. 即只需要480 Bits就可以表示2310个整数中的所有可能的质数.
- 标 题:压缩筛选法求1~N内的所有质数
- 作 者:arab
- 时 间:2009-05-21 22:49:10
- 链 接:http://bbs.pediy.com/showthread.php?t=89497