Computing Prime Classes

The class of students entering college in 1999 and graduating in 2003 is a special class because both 1999 and 2003 are prime number. Between, 1900 and 2100, how many such classes exist?

Enter the two years in the applet below to find out.



/* 
	Applet that prints out "prime classes" between any two give years.
	What is a prime class?
		If both the entering and graduating years of a class are prime numbers
		then we have a prime class. For example, Class of 2003 entered in 1999. Both
		1999 and 2003 are prime classes.
		
	Credits: This problem was communicated to me via a student (class of 2003) who heard
			  Haverford President Tom Tritton describe it.
			  
    You can use this applet to find out how many prime classes are there between 1900 and 2100


*/
import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class PrimeClasses extends Applet implements ActionListener {

	// GUI Elements
	TextField firstNumber = new TextField(5);
	TextField secondNumber = new TextField(5);
	Button goButton = new Button("Go");
	
	// program variables
	int year1=0, year2=0;
	
	public void init() {
	
		makeGUI();
	
	} // init
	
	private boolean isPrime(int n) {
		// See if n is a prime number
		for (int divisor=2; divisor*divisor <= n; divisor++) {
			if (n % divisor == 0)
				return false;
		}
		return true;
	} // isPrime
	
	public void paint(Graphics g) { 
		int lastPrime = 0, x = 20, y = 20;
		for (int year = year1; year <= year2; year++) {
			// See if year is a prime number
			if (isPrime(year)) {
				if (year - lastPrime == 4) {
					// we got a prime class, print it
					g.drawString(lastPrime + ", " + year, x, y);
					y = y + 15;
				}
				lastPrime = year;
			} // if...
		} // for...
	} // paint
	
	public void actionPerformed (ActionEvent e) {
		String cmd = e.getActionCommand();
		
		if (cmd.equals("Go")) {
			// deal with the action
			// read the start and end numbers
			processInput();
			
			repaint();
		}
	} // actionperformed

	public void processInput() {
	
		String s;
		Integer i;
		
		// Get the text in Start Field
		s = firstNumber.getText();
		
		// Convert it to Integer object
		i = new Integer(s);
		
		// gets its int value
		year1 = i.intValue();
		
		// Get the text in End Field
		s = secondNumber.getText();
		
		// Convert it to Integer object
		i = new Integer(s);
		
		// gets its int value
		year2 = i.intValue();
	} // processInput
	
	private void makeGUI() {
		Label startLabel = new Label("Start :", Label.RIGHT);
		Label endLabel = new Label("End :", Label.RIGHT);
		Panel p1 = new Panel();
		Panel p2 = new Panel();
		Panel p3 = new Panel();
		Panel p11 = new Panel();
		Panel p21 = new Panel();
		Panel p = new Panel();
		
		// add the labels and textfields to the panels and applet
		p1.setLayout(new GridLayout(1, 2));
		p1.setBackground(Color.cyan);
		p1.add(startLabel);
	
		p11.setLayout(new FlowLayout(FlowLayout.LEFT));
		p11.add(firstNumber);
		p1.add(p11);
	
		p2.setLayout(new GridLayout(1, 2));
		p2.setBackground(Color.cyan);
		p2.add(endLabel);
	
		p21.setLayout(new FlowLayout(FlowLayout.LEFT));
		p21.add(secondNumber);
	
		p2.add(p21);
	
		p3.setBackground(Color.black);
		p3.add(goButton);
	
		p.setLayout(new GridLayout(3, 1));
		p.add(p1);
		p.add(p2);
		p.add(p3);
	
		// add the panel to the applet
		this.setLayout(new BorderLayout());
		this.setBackground(Color.yellow);
		add(p, "South");
	
		// register listener(s), if any
		goButton.addActionListener(this);
	} // makeGUI
	
} // PrimeClasses