//  HashTableDemo.java              CS 326 sample code for HW 4
//
//   Jeff Horn                              Winter 2007     2-20-07


import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.util.*;
import java.awt.Component;
import java.awt.Panel;
import java.math.*;


public class HashTableDemo extends Applet

	{

		private Hashtable archive = new Hashtable(1000000);

		private Random rand = new Random(1234567890);

		private int hits, misses, primes = 0;
		private int delay=10000;


        public HashTableDemo()
             {
				 int temp;
				 boolean is_prime;

				 for(int i = 0; i < 1000000; i++)
				     {
						 temp = rand.nextInt(25000);
						 if(archive.containsKey(new Integer(temp)))
						     {
								 hits++;
								 is_prime = (((Integer)(archive.get(new Integer(temp)))).intValue() == 1);
							 }
						    else
						    {
							   misses++;
							   is_prime = is_this_prime(temp);
							    if(is_prime)
							       archive.put(new Integer(temp),new Integer(1));
							       else archive.put(new Integer(temp),new Integer(0));
						    }
						  if(is_prime) primes++;
					 }

			 }



	    public void paint(Graphics g)
	          {
				 g.drawString("Archive Size: " + archive.size(), 100,100);
                 g.drawString("Archive Hits: " + hits, 100,130);
                 g.drawString("Archive Misses: " + misses, 100,160);
                 g.drawString("Archive Primes: " + primes, 100,190);

	           }

	    public boolean is_this_prime(int x)
	          {
				 BigInteger bX = new BigInteger(String.valueOf(x));
	//			 for(int i=0; i < delay; i++);
				 return bX.isProbablePrime(12);

	           }


}

