欢迎访问宙启技术站
智能推送

使用Java函数实现判断一个数是否是质数

发布时间:2023-05-20 22:11:24

质数是指只能被1和本身整除的数,如2、3、5、7等就是质数。判断一个数是否为质数是一个常见的数学问题,而在Java中,也可以使用函数来实现判断一个数是否是质数。

一、判断一个数是否为质数

判断一个数是否为质数,实际上就是判断这个数能否被除了1和本身之外的数整除。因此,可以采用暴力法循环判断这个数是否能够被小于它的正整数整除,若都不能整除,那么它就是质数;否则,就不是质数。

代码实现如下:

public static boolean isPrime(int num) {

    if (num <= 1) {

        return false;

    }

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

        if (num % i == 0) {

            return false;

        }

    }

    return true;

}

二、优化判断质数的方法

上述实现方式虽然简单,但是当数字变大时,速度会非常慢。因此,需要对其进行优化。

首先,可以发现,如果一个数不能被2整除,那么它肯定也不能被大于2的偶数整除,因此,在循环时,可以只考虑奇数。

其次,可以只循环到$\sqrt{n}$,而不需要循环到$n-1$。因为,如果$n$不是质数,那么它一定可以分解为$pq$的形式,其中$p$和$q$都不超过$\sqrt{n}$。因此,如果能找到一个因数$p$,那么就一定能找到一个因数$q$,从而判断$n$是否为质数。

代码实现如下:

public static boolean isPrime(int num) {

    if (num <= 1) {

        return false;

    }

    if (num % 2 == 0) {

        return num == 2;

    }

    int sqrt = (int) Math.sqrt(num);

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

        if (num % i == 0) {

            return false;

        }

    }

    return true;

}

三、测试函数

测试函数用于测试一个函数是否符合预期的结果。在判断质数的函数中,我们可以使用测试函数来验证程序的正确性。

代码实现如下:

public static void test() {

    int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };

    boolean[] expected = { false, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true, false };

    for (int i = 0; i < nums.length; i++) {

        boolean result = isPrime(nums[i]);

        boolean exp = expected[i];

        if (result == exp) {

            System.out.println("test case " + i + " pass");

        } else {

            System.out.println("test case " + i + " fail");

        }

    }

}

四、完整代码实现

完整代码实现如下:

public class Main {

    public static void main(String[] args) {

        test();

    }

    public static boolean isPrime(int num) {

        if (num <= 1) {

            return false;

        }

        if (num % 2 == 0) {

            return num == 2;

        }

        int sqrt = (int) Math.sqrt(num);

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

            if (num % i == 0) {

                return false;

            }

        }

        return true;

    }

    public static void test() {

        int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };

        boolean[] expected = { false, true, true, false, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true, false };

        for (int i = 0; i < nums.length; i++) {

            boolean result = isPrime(nums[i]);

            boolean exp = expected[i];

            if (result == exp) {

                System.out.println("test case " + i + " pass");

            } else {

                System.out.println("test case " + i + " fail");

            }

        }

    }

}

五、总结

本文介绍了使用Java函数实现判断一个数是否是质数的方法,并对其进行了优化。同时,通过添加测试函数来验证程序的正确性。在日常编程中,判断一个数是否为质数是一个非常常见的问题,因此,理解和掌握这个方法对于Java程序员来说是十分必要的。