All pastes #753034 Raw Edit

Zeug

public java v1 · immutable
#753034 ·published 2007-10-28 22:13 UTC
rendered paste body
import java.util.*;public class primes {	/**	 * Prints a <code>LinkedList</code> filled with prime numbers (or any int).	 * Uses the java 5 style "for (type name : <code>LinkedList</code>)" for loop.	 * 	 * @param primes An int <code>LinkedList</code> of any length computable.	 */	public static void printPrimes (LinkedList<Integer> primes) {		System.out.print("The first " + primes.size() + " primes are:");		for (int prime : primes) {			System.out.print(" " + prime + " ");		}		System.out.println();	}		/**	 * Computes <quantity> prime numbers into an <code>LinkedList</code>.	 * Uses extendPrimes if the length of the <code>LinkedList</code> is smaller	 * than quantity.	 * 	 * @param quantity Natural number of prime numbers to compute.	 * @return A <code>LinkedList</code> containing <quantity> prime numbers.	 */	public static LinkedList<Integer> findPrimes (int quantity){		LinkedList<Integer> primes = new LinkedList<Integer>();				// set first prime number		primes = extendPrimes (primes, quantity);		return primes;	}                                                                               	/**	 * Computes targetNumber prime numbers. Extends the given <code>LinkedList</code> if needed.	 * 	 * @param primes A <code>LinkedList</code> filled with prime numbers (or to be extended and filled).	 * @param targetNumber Number of primes that should be in the <code>LinkedList</code> that is returned.	 * @return <code>LinkedList</code> of length targetNumber filled with primes	 */	private static LinkedList<Integer> extendPrimes (LinkedList <Integer> primes, int targetNumber) {		int NumberFound = 0;		// set the first two prime numbers		if (primes.size() < 2) {			if (targetNumber >= 1) {				primes.add(2);				NumberFound++;			}			if (targetNumber >= 2) {				primes.add(3);				NumberFound++;			}		}		// candidate for testing		int candidate = primes.getLast() + 2;		boolean isprime = true;		while (NumberFound < targetNumber) {			isprime = true;			for (int knownp : primes) {				if (candidate % knownp == 0) {					isprime = false;					break;				}			}			if (isprime) {				primes.add(candidate);				NumberFound++;			}			candidate = candidate + 2;		}		return primes;	}		/**	 * Prints <number> pairs of prime numbers which follow the following	 * condition: abs(p - p') == 2. Begin with the smallest.	 * 	 * @param primes	 *           A <code>LinkedList</code> filled with prime numbers.	 * @param number	 *           Natural number of primeTwins to be found and printed.	 */	public static void printPrimeTwins (LinkedList<Integer> primes, int number) {		System.out.print("The first " + number + " primetwins are:");		int foundNumber = 0;		int i = 0;		int tmpPrime1;		int tmpPrime2 = 2;		while (foundNumber < number) {			if (i + 1 >= primes.size()) {				primes = extendPrimes(primes, number + 2);			}			tmpPrime1 = tmpPrime2;			tmpPrime2 = primes.get(i + 1);			if (Math.abs(tmpPrime1 - tmpPrime2) == 2) {				System.out.print(" (" + tmpPrime1 + "," + tmpPrime2 + ") ");				foundNumber++;			}			i++;		}		System.out.println();	}		/**	 * Find smallest prime number whose successor is at least <delta> bigger.	 * 	 * @param primes A <code>LinkedList</code> filled with prime numbers.	 * @param delta Difference between the two prime numbers.	 * @return prime number p where nextp - p > delta	 */	public static void printDeltaPrime (LinkedList<Integer> primes, int delta) {		int i = 2;		int tmpPrime1 = 2;		int tmpPrime2 = 3;				System.out.println("Searching for succeding primes with delta > " + delta);		while ((tmpPrime2 - tmpPrime1) <= delta) {			if (i >= primes.size() - 1) {				extendPrimes(primes, delta + 2);			}						tmpPrime1 = tmpPrime2;			tmpPrime2 = primes.get(i);						if (i % 10000 == 0) {				System.out.println ("    testing prime numbers > " + i +"...");			}			i++;		}					System.out.println("  Lowest prime and it's succeeding prime are " + 							tmpPrime1 + " and " + tmpPrime2 +", ");		System.out.println("  delta is " + (tmpPrime2 - tmpPrime1));	}	/**	 * Used to let the class be a program and run.	 * 	 * @param args If we wanted to pass arguments to main, we would need this.	 */	public static void main(String[] args) {		final int primesQuantity = 20;		final int primeTwinsQuantity = 50;		final int primeDelta = 50;		LinkedList<Integer> primes = new LinkedList<Integer>();		primes = findPrimes (primesQuantity);		printPrimes (primes); 		System.out.println("");		printPrimeTwins (primes, primeTwinsQuantity);		System.out.println("");		printDeltaPrime (primes, primeDelta);	}}