From《Java核心卷 基础篇》
该算法的思想根据命名可以得出是一个过滤思想
该算法有几个关键点,怎么筛和筛子什么时候停的问题
import java.util.BitSet;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
int n = 100;
long start = System.currentTimeMillis();
BitSet b = new BitSet(n + 1);
int count = 0;
int i;
for (i = 2; i <= n; i++) {
b.set(i);
}
i = 2;
// 假设当i*i>n时,i能整除n,那么n必然被一个小于i的数整除。说明其已经被过滤掉了。
while (i * i <= n) {
if (b.get(i)) {
count++;
int k = 2 * i;
while (k <= n) {
b.clear(k);
k += i;
}
System.out.print(i + " ");
}
i++;
}
// System.out.println("count="+count);
// System.out.println("i="+i);
while (i <= n) {
if (b.get(i)) {
count++;
System.out.print(i + " ");
}
i++;
}
long end = System.currentTimeMillis();
System.out.println(count + " primes");
System.out.println(end - start + "ms");
}