/* The Great Computer Language Shootout http://shootout.alioth.debian.org/ contributed by Alexei Svitkine */ public class nsieve { static int nsieve(int m, boolean[] isPrime) { for (int i=2; i <= m; i++) isPrime[i] = true; int count = 0; for (int i=2; i <= m; i++) { if (isPrime[i]) { for (int k=i+i; k <= m; k+=i) isPrime[k] = false; 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; boolean[] flags = new boolean[m+1]; System.out.println("Primes up to " + padNumber(m, 8) + " " + padNumber(nsieve(m,flags), 8)); m = (1<<n-1)*10000; System.out.println("Primes up to " + padNumber(m, 8) + " " + padNumber(nsieve(m,flags), 8)); m = (1<<n-2)*10000; System.out.println("Primes up to " + padNumber(m, 8) + " " + padNumber(nsieve(m,flags), 8)); } }