求某个数内所有的质数

最近发现有一个类: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 

 

你可能感兴趣的:(质数)