import java.io.*; import java.math.*; import java.util.*; public class PrimeHandler extends Thread { private long lastPrime = 0; private String fileName = "last_prime.txt"; private Date lastFound = new Date(); private String password = "2isAnOddPrime"; public static void main(String[] args) { new PrimeHandler(); } public PrimeHandler() { //setDaemon(true); setPriority(Thread.MIN_PRIORITY); // be nice! start(); } public String getPrime(String password) { if(password.equals(this.password)) return "\nPrime: " + Long.toString(lastPrime) + "\nFound: " + lastFound; return "Wrong password!"; } public void run() { long candidate = loadPrime(); while(true) { if(isPrime(candidate)) { lastPrime = candidate; lastFound = new Date(); savePrime(candidate); } candidate += 2; try { sleep(250); } catch(InterruptedException ie) {} // be nice! } } private boolean isPrime(long candidate) { long sqrt = (long)Math.sqrt(candidate); for(long i = 3; i <= sqrt; i += 2) if(candidate % i == 0) return false; return true; } private synchronized void savePrime(long prime) { try { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(fileName)); oos.writeObject(new Long(prime)); oos.close(); } catch (IOException ioe) {} } private synchronized long loadPrime() { long prime = 3; try { ObjectInputStream ois = new ObjectInputStream(new FileInputStream(fileName)); prime = ((Long)ois.readObject()).longValue(); ois.close(); } catch (Exception ioe) {} return prime; } }