/* The Computer Language Shootout http://shootout.alioth.debian.org/ contributed by Alkis Evlogimenos */ import java.util.BitSet; public class nsievebits { private static int nsieve(int m, BitSet bits) { bits.set(0, m+1); int count = 0; for (int i = 2; i <= m; ++i) { if (bits.get(i)) { for (int j = i + i; j <=m; j += i) bits.clear(j); ++count; } } return count; } public static String padNumber(int number, int fieldLen) { StringBuffer sb = new StringBuffer(); String bareNumber = "" + number; int numSpaces = fieldLen - bareNumber.length(); for (int i = 0; i < numSpaces; i++) sb.append(" "); sb.append(bareNumber); return sb.toString(); } public static void main(String[] args) { int n = 2; if (args.length > 0) n = Integer.parseInt(args[0]); if (n < 2) n = 2; int m = (1 << n) * 10000; BitSet bits = new BitSet(m+1); System.out.println("Primes up to " + padNumber(m, 8) + " " + padNumber(nsieve(m,bits), 8)); m = (1 << n-1) * 10000; System.out.println("Primes up to " + padNumber(m, 8) + " " + padNumber(nsieve(m,bits), 8)); m = (1 << n-2) * 10000; System.out.println("Primes up to " + padNumber(m, 8) + " " + padNumber(nsieve(m,bits), 8)); } }