欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

求100以内的质数

程序员文章站 2024-03-15 12:53:11
...

说明

第一次写****博客,一方面是记录自己学习复习,另一方面是向各位大牛学习,如有更优的算法,还望不吝赐教。
这是一个入门级的编程问题,常见的是求100以内的质数,这里为了能更好的体现算法的重要性,选择使用100000以内的质数

定义法

public class PrimeNumber {
    public static void main(String[] args) {
        boolean isFlag=true;                            //标识i是否被j除尽,一旦除尽,修改其值
        long start=System.currentTimeMillis();          //获得当前时间距离1970-01-01 00:00:00的毫秒时间
        System.out.print("100000以内的质数有:");
        for(int i=2;i<=100000;i++){                     //检验100000以内的质数,最小质数为2
            for(int j=2;j<i;j++){                       //根据质数的定义,检验是否只能被1和本省整除
                if (i%j==0){                            //出现非本数整除,则不是质数
                    isFlag=false;
                }
            }
            if (isFlag==true){
                System.out.print(i+" ");                 //输出质数
            }
            isFlag=true;                                 //重装isFlag的值为true,是的能够检验质数
        }
        long end=System.currentTimeMillis();
        System.out.println();                            //换行
        System.out.println("花费的时间为:"+(end-start));   
    }
}

运行时间(毫秒): 求100以内的质数

优化一:break

public class PrimeNumber {
    public static void main(String[] args) {
        boolean isFlag=true;                            //标识i是否被j除尽,一旦除尽,修改其值
        long start=System.currentTimeMillis();          //获得当前时间距离1970-01-01 00:00:00的毫秒时间
        System.out.print("100000以内的质数有:");
        for(int i=2;i<=100000;i++){                     //检验100000以内的质数,最小质数为2
            for(int j=2;j<i;j++){                       //根据质数的定义,检验是否只能被1和本省整除
                if (i%j==0){                            //出现非本数整除,则不是质数
                    isFlag=false;
                    break;                              //优化一:当出现整除数时停止循环
                }
            }
            if (isFlag==true){
                System.out.print(i+" ");                 //输出质数
            }
            isFlag=true;                                 //重装isFlag的值为true,是的能够检验质数
        }
        long end=System.currentTimeMillis();
        System.out.println();                            //换行
        System.out.println("花费的时间为:"+(end-start));
    }
}

优化一运行时间(毫秒): 求100以内的质数

优化二:Math.sqrt()

public class PrimeNumber {
    public static void main(String[] args) {
        boolean isFlag=true;                            //标识i是否被j除尽,一旦除尽,修改其值
        long start=System.currentTimeMillis();          //获得当前时间距离1970-01-01 00:00:00的毫秒时间
        System.out.print("100000以内的质数有:");
        for(int i=2;i<=100000;i++){                     //检验100000以内的质数,最小质数为2
            for(int j=2;j<Math.sqrt(i);j++){            //优化二,使用Math.sqrt()再次减少检测的范围。math.sqrt()返回正确舍入的 double 值的正平方根。
                if (i%j==0){                            //出现非本数整除,则不是质数
                    isFlag=false;
                    break;                              //优化一:当出现整除数时停止循环
                }
            }
            if (isFlag==true){
                System.out.print(i+" ");                 //输出质数
            }
            isFlag=true;                                 //重装isFlag的值为true,是的能够检验质数
        }
        long end=System.currentTimeMillis();
        System.out.println();                            //换行
        System.out.println("花费的时间为:"+(end-start));
    }
}

优化二运行时间(毫秒):
求100以内的质数

仅输出个数版本:减少输出所花耗的时间,仅输出个数

public class PrimeNumber {
    public static void main(String[] args) {
        boolean isFlag=true;                            //标识i是否被j除尽,一旦除尽,修改其值
        int count=0;                                    //记录质数的个数
        long start=System.currentTimeMillis();          //获得当前时间距离1970-01-01 00:00:00的毫秒时间
        System.out.print("10000以内的质数有:");
        for(int i=2;i<=10000;i++){
            for(int j=2;j<Math.sqrt(i);j++){            //优化二,使用Math.sqrt()再次减少检测的范围,math.sqrt()返回正确舍入的 double 值的正平方根。
                if (i%j==0){
                    isFlag=false;
                    break;                             //优化一,当发现非质数时,及时停止测试
                }
            }
            if (isFlag==true){
                count++;
            }
            isFlag=true;
        }
        long end=System.currentTimeMillis();
        System.out.println(count+"个");                 //优化三,依次输出每个质数,画好时间
        System.out.println();
        System.out.println("花费的时间为:"+(end-start));
    }
}

运行时间(毫秒):
求100以内的质数

相关标签: Java java