For grins here’s an alternative implementation of your algorithm that is slower but likely takes less memory:
private static BitSet primesBS(int n) { int nbits = n + 1; BitSet bs = new BitSet(nbits); bs.set(0, 2, true); for (int p = 2; p * p < n;) { for (int i = 2 * p; i < nbits; i += p) { bs.set(i, true); } do { ++p; } while (bs.get(p)); } return bs; } Note that in this case a set bit means NOT prime. Brian On Apr 28, 2014, at 11:52 AM, Florian Weimer <fwei...@redhat.com> wrote: > private static boolean[] primes(int n) { > boolean[] primes = new boolean[n + 1]; > Arrays.fill(primes, true); > primes[0] = false; > primes[1] = false; > for (int p = 2; p * p < n; ) { > for (int i = 2 * p; i < primes.length; i += p) > primes[i] = false; > do > ++p; > while (!primes[p]); > } > return primes; > }