Java 判断质数的方法

Java 判断质数的方法,第1张

public static void main(String[] args) {

int count=0

int prime=1

while(count<100){

while(true){

prime++

if(isPrime(prime)){

System.out.print(prime+"||")

count++

if(count%10==0){

System.out.println(" ")

break

}

}

}

}

}

public static boolean isPrime(int n){

for(int i=2i<ni++){

if(n%i==0){

return false

}

}

if(n==1){

return false

}

return true

}

1、Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、拦拿数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

2、Java是由Sun Microsystems公司推出的Java面向对象程序设计语言(以下简称Java语世举言)和Java平台的总称。由James Gosling和同事们共同研发,并在1995年正式推出。Java最初被称为Oak,是1991年为消费类电子产品的嵌入式芯片而设计的。1995年更名为Java,并重新设计用于开发Internet应用程序。

3、用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨搜衡碧平台、动态Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器均支持Javaapplet。另一方面,Java技术也不断更新。Java自面世后就非常流行,发展迅速,对C++语言形成有力冲击。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。2010年Oracle公司收购Sun Microsystems。

我写了几种方法,并逐步优化,并且对每一种方法进行了1000000次的调用测试每种方法的速度,仅供参考:

import java.math.BigInteger

public class Test_04 {

    /**

     * 最笨重的一种方法,用该整数分别除以比它小的数,看是否能被整除

     */

    public boolean isPrimeNum_1(int num) {

        // 识别小于2的数

        if (num < 2) {

            return false

        }

        for (int i = 2 i < num i++) {

            if (num % i == 0) {

                return false

            }

        }

        return true

    }

    /**

     * 优化第一种方法<br>

     * 1、偶数不可能是质数<br>

     * 2、对于大于2的数,如果一个数a大于数b的一半,那么b不可能被a整除

   含悄薯  */

    public boolean isPrimeNum_2(int num) {

        // 2特殊处理

        if (num == 2) {

            return true

        }

        // 识别小于2的数和偶数

        if (num < 2 || num % 2 == 0) {

            return false

        }

        int max = num / 2

        for (int i = 3 i < max i += 2) 谈者{

            if (num % i == 0) {

                return false

            }

        }

        return true

    }

    /**

     * 在第二种方法上再次优化,利用数字的性质:<br>

     * 一个数不是素数就是合数,那么一定可以由两个自然数相乘得到,其中一个大于或等于它的平方根,<br>

     * 一个小于或等于它的平方根,并且成对出现。<br>

     * 这样就可以把计算量大幅度减少

     */

    public boolean isPrimeNum_3(int num) {

        if (num == 2) {

            return true// 2特殊处理

        }

        if (num < 2 || num % 2 == 0) {

            return false// 识别小于2的数和偶数

        }

        double sqrt = Math.sqrt(num)

        for (int i = 3 i <= sqrt i += 2) {

            if (num % i == 0) {

                return false

            }

        }

        return true

    }

    /**

     * Java中的BigInteger中已经写好了一个判断是否为质数的方法,直接用就可以了

     */

    public boolean isPrimeNum_4(int num) {

        BigInteger integer = BigInteger.valueOf(num)

        return integer.isProbablePrime(1)

    }

    public static void main(String[] args) {

        Test_04 test_04 = new Test_04()

        int num = 991

        System.out.println(test_04.isPrimeNum_1(num))

        long startTime = System.currentTimeMillis()

        for (int i = 0 i < 1000000 i++) {

            test_04.isPrimeNum_1(num)

        }

        long endTime = System.currentTimeMillis()

        System.out.println("第一种方法运行时间:" + (endTime - startTime) + "ms")

        System.out.println(test_04.isPrimeNum_2(num))

        startTime = System.currentTimeMillis()

        for (int i = 0 i < 运绝1000000 i++) {

            test_04.isPrimeNum_2(num)

        }

        endTime = System.currentTimeMillis()

        System.out.println("第二种方法运行时间:" + (endTime - startTime) + "ms")

        System.out.println(test_04.isPrimeNum_3(num))

        startTime = System.currentTimeMillis()

        for (int i = 0 i < 1000000 i++) {

            test_04.isPrimeNum_3(num)

        }

        endTime = System.currentTimeMillis()

        System.out.println("第三种方法运行时间:" + (endTime - startTime) + "ms")

        System.out.println(test_04.isPrimeNum_4(num))

        startTime = System.currentTimeMillis()

        for (int i = 0 i < 1000000 i++) {

            test_04.isPrimeNum_4(num)

        }

        endTime = System.currentTimeMillis()

        System.out.println("第四种方法运行时间:" + (endTime - startTime) + "ms")

    }

}

输出结果:

true

第一种方法运行时间:2732ms

true

第二种方法运行时间:671ms

true

第三种方法运行时间:68ms

true

第四种方法运行时间:1064ms


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12405636.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存