免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1023 | 回复: 0
打印 上一主题 下一主题

一个计算质数的Java程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-09-16 15:16 |只看该作者 |倒序浏览

这个Java程序用来计算质数,基本原理就是判断整除,用一个ArrayList记录已知的质数,一开始放入3,5,7,11,13,17,19,23,29,然后从31开始对奇数进行for(int n=31; ;n+=2)循环,对每个待判断的n,用已知的质数依次判断是否能整除,如果得到一个新的质数,就把它放到ArrayList中。
特殊之处在于,我把它实现了序列化,每次启动时可以恢复到上次的状态,正文是源代码
[color="#006400"]import java.io.*;
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[color="#006400"]
        }
        return false;
    }
[color="#006400"]    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("
There are " + (list.size()+1) + " prime numbers.
2        ");
        for(int i=0; i    public void displayLast()
    {
        int nStart=list.size()-20;
        System.out.println("
The last 20 prime numbers:");
        if(nStart=0)
                System.out.print(list.get(i).toString()+"        ");
        }
        System.out.println("
");
    }
    public void storeAsFile()
    {
        DataOutputStream dos = null;
        try {
            dos = new DataOutputStream(new BufferedOutputStream(
                  new FileOutputStream("prime.data")));
            dos.writeInt(2);
            for(int i=0; i
    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.
Create 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("
Writing to file... ");
        System.out.println(PrimeNumber.store(pn)==true?"done.":"failed.");
    }
[color="#006400"]    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;
    }
}
还可以把所有质数导出到文件,每4byte是一个质数,从小到大排列。我用这个程序计算了[color="#ff0000"]100,000个质数,算到的最大的质数是[color="#ff0000"]1299709

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/8682/showart_47915.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP