目的: 计算2-2000000之间的素数
import java.util.BitSet;
/**
1. @author HK
*/
public class Sieve {
public static void main(String[] args) {
int n = 2000000;
long start = System.currentTimeMillis();
BitSet bitSet = new BitSet(n + 1);
int count = 0;
int i;
for (i = 2; i <= n; i++) {
bitSet.set(i);
}
i = 2;
while (i * i <= n) {
if (bitSet.get(i)) {
count++;
int k = 2 * i;
while (k <= n) {
bitSet.clear(k);
k += i;
}
}
i++;
}
while (i <= n) {
if (bitSet.get(i)){ count++;}
i++;
}
long end=System.currentTimeMillis();
System.out.println(count+"素数");
System.out.println((end-start)+"毫秒");
}
}
采用的是埃拉托斯特尼筛选法计算法:有兴趣可以自己看看
1.创建一个bitSet对象默认为每个位为0
2. set(i)方法将该位上改为1
3. get(i)方法获取当前状态1为true 0为false
4. clear(k)方法将该位上改为0
输出结果:
148933
63毫秒