一个关于质数的计算代码

xiaoxiao2026-09-12  16

public static void main(String args[]) { int n = 0; List<Integer> list = new ArrayList<Integer>(10); list.add(2); list.add(3); list.add(5); list.add(7); list.add(11); list.add(13); list.add(17); list.add(19); list.add(23); list.add(29); outer: for (int i = 101; i < 200; i += 2) { for (int j = 0; j < list.size(); j++) { if (i % list.get(j) == 0) { continue outer; } } System.out.print(" " + i); n++; if (n < 10) { continue; } System.out.println(); n = 0; } } package andy.chen.chart; import java.io.BufferedOutputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.*; 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); 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 { ObjectInputStream 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.\n\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() { 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) { e.printStackTrace(); } } } } public static void main(String[] args) { 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; } } 相关资源:计算万亿以内质数个数的C语言程序代码
转载请注明原文地址: https://www.6miu.com/read-5052560.html

最新回复(0)