/** * */ package net.varkhan.base.containers; /** * @author varkhan * @date Feb 10, 2010 * @time 6:26:42 AM */ public class PrimeNumberGenerator { private static boolean isPrime(long[] primes, int len, long num) { for(int i=0;i<len;i++) { long p=primes[i]; if(p*p>num) return true; if(num%p==0) return false; } // We should never get there, but if we do it means num is too big, so we can't be sure return false; } private static long[] getPrimes(int len) { int prog=(1<<(int) (Math.log(len/1000)/Math.log(2)))-1; if(len<1) return new long[0]; long[] primes=new long[len]; primes[0]=2; int pos=1; long num=3; while(pos<len) { if(isPrime(primes, pos, num)) { primes[pos++]=num; if((pos&prog)==0) System.err.println("Prime no "+pos+" = "+num); } num+=2; } return primes; } public static void computePrimes(int num, double step) { long[] primes=getPrimes(num); int i=0; double r=1; for(long p : primes) { if(p>r) { if(i%20==0) System.out.print("\n "); System.out.printf("%8d, ", p); i++; r*=step; } } System.out.println(); } public static void main(String[] args) { computePrimes(200000,1.2); } }