一个关于质数的计算代码

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;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值