import java.io.*;import java.util.*;
/**
* author: liao xuefeng, www.crackj2ee.com
*/
public class primenumber implements serializable
{
private arraylist list;
private int nstart;
public primenumber()
{
list=new arraylist(9);
list.add(new integer(3));
list.add(new integer(5));
list.add(new integer(7));
list.add(new integer(11));
list.add(new integer(13));
list.add(new integer(17));
list.add(new integer(19));
list.add(new integer(23));
list.add(new integer(29));
nstart=31;
}
public void calculate(int number)
{
system.out.print("start calculating prime numbers... ");
if (number<=0)
return;
list.ensurecapacity(number);
int ngot=0;
boolean bprime;
int n;
for(int ntest=nstart; ; ntest+=2)
{
bprime=true;
for(int i=0; i<list.size(); i++)
{
n=((integer)(list.get(i))).intvalue();
if (ntest % n == 0)
// not a prime number:
{
bprime=false;
break;
}
}
if (bprime) // found a prime number
{
list.add(new integer(ntest));
ngot++;
system.out.print("/nfound "+ntest+", "+(number-ngot)+" left.");
if (ngot==number) // ok, finish calculation.
{
nstart=ntest+2;
system.out.println("/ndone./n");
return;
}
}
}
}
public static boolean store(primenumber obj)
{
objectoutputstream objout = null;
try
{
objout=new objectoutputstream(new fileoutputstream("prime.obj"));
objout.writeobject(obj);
return true;
}
catch(exception e) {}
finally {
if(objout!=null) {
try { objout.close(); } catch(exception e) {}
}
}
return false;
}
public static primenumber load()
{
try
{
objectinput objin=new objectinputstream(new fileinputstream("prime.obj"));
primenumber pn=(primenumber)objin.readobject();
objin.close();
return pn;
}
catch(exception e)
{
}
return null;
}
public void display()
{
system.out.print("/nthere are " + (list.size()+1) + " prime numbers./n2/t");
for(int i=0; i<list.size(); i++)
{
system.out.print(list.get(i).tostring());
system.out.print("/t");
}
system.out.println("/n");
}
public void displaylast()
{
int nstart=list.size()-20;
system.out.println("/nthe last 20 prime numbers:");
if(nstart<0)
system.out.print("2/t");
for(int i=nstart; i<list.size(); i++)
{
if (i>=0)
system.out.print(list.get(i).tostring()+"/t");
}
system.out.println("/n");
}
public void storeasfile()
{
dataoutputstream dos = null;
try {
dos = new dataoutputstream(new bufferedoutputstream(
new fileoutputstream("prime.data")));
dos.writeint(2);
for(int i=0; i<list.size(); i++) {
dos.writeint(((integer)list.get(i)).intvalue());
}
system.out.println("prime numbers has been saved./n");
}
catch(exception e) {
system.out.println("there is an error occured. saving failed./n");
}
finally {
if(dos!=null) {
try { dos.close(); } catch(exception e) {}
}
}
}
public static void main(string[] args)
{
// first try to read from disk:
system.out.print("reading from file... ");
primenumber pn=primenumber.load();
if (pn==null)
{
system.out.println("failed./ncreate a new calculator... done.");
pn=new primenumber();
}
else
system.out.println("done.");
int sel;
do
{
system.out.println("==============================================================");
sel=pn.getcommand();
switch(sel)
{
case 1:
pn.calculate(10);
break;
case 2:
pn.calculate(100);
break;
case 3:
pn.calculate(1000);
break;
case 4:
pn.calculate(10000);
break;
case 5:
pn.display();
break;
case 6:
pn.displaylast();
break;
case 7:
pn.storeasfile();
break;
case 8:
break;
default:
system.out.println("invalid command.");
}
}while(sel!=8);
system.out.print("/nwriting to file... ");
system.out.println(primenumber.store(pn)==true?"done.":"failed.");
}
public int getcommand()
{
system.out.println(" total "+(list.size()+1)+" prime numbers calculated. select:");
system.out.println(" 1. calculate next 10 prime numbers.");
system.out.println(" 2. calculate next 100 prime numbers.");
system.out.println(" 3. calculate next 1000 prime numbers.");
system.out.println(" 4. calculate next 10000 prime numbers.");
system.out.println(" 5. display all prime numbers.");
system.out.println(" 6. display the last 20 numbers.");
system.out.println(" 7. save all prime numbers as a file.");
system.out.println(" 8. save all prime numbers and quit.");
system.out.print (" your selection: ");
int sel=0;
try
{
inputstreamreader isr=new inputstreamreader(system.in);
sel=isr.read()-48;
}
catch(ioexception e){}
return sel;
}
}