WEB开发网
开发学院WEB开发Jsp 一个计算质数的Java程序 阅读

一个计算质数的Java程序

 2008-01-05 08:58:42 来源:WEB开发网   
核心提示:import java.io.*;import java.util.*;/** * Author: Liao Xuefeng, www.crackj2ee.com */public class PRimeNumber implements Serializable{ private ArrayList list;
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;
   }
}

Tags:一个 计算 质数

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接