最近发现有一个类:java.util.BitSet,挺好用的。
例如在求某个数下所有的质数,可以如下实现:
public static int[] listPrimesUnder(int number) {
assert number > 1;
int count = 0;
BitSet bs = new BitSet(number);
for (int i = 2; i <= number; i++) {
if (bs.get(i - 1)) {
continue;
}
count++;
int t = i + i;
while (t <= number) {
bs.set(t - 1);
t += i;
}
}
int[] results = new int[count];
count = 0;
for (int i = 2; i <= number; i++) {
if (!bs.get(i - 1)) {
results[count++] = i;
}
}
return results;
}
首先用bitset对象作个占位符,把非质数的数先标识出来。最后再一遍,把质数的数填充返回内容。
例如100以内的质数有:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97