In PrimeGenerator.java:
public class PrimeGenerator { private int lastPrime = 1; private final int MAX_PRIME; public PrimeGenerator(int maxPrime) { MAX_PRIME = maxPrime; } public int next() { lastPrime++; int divisor = 2; // The expression after the logical AND is // a way of reducing the number of operations // required to determine if a number can be a // prime. while (lastPrime <= MAX_PRIME && divisor*divisor <= lastPrime) { if (lastPrime == divisor) { // prime! return lastPrime; } else if (lastPrime % divisor == 0) { // not prime lastPrime++; divisor = 2; } else { // try the next highest divisor divisor++; } } if (lastPrime > MAX_PRIME) return -1; else return lastPrime; } }
In Main.java:
public class Main { public static void main(String[] args) { PrimeGenerator pg = new PrimeGenerator(2000); // Print first 50 primes, five primes per line for (int line = 0; line < 10; line++) { for (int prime = 0; prime < 5; prime++) { int n = pg.next(); if (n != -1) System.out.print(n + " "); } System.out.println(); } } }