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

Java函数——如何判断数字是否是质数?

发布时间:2023-06-23 07:28:31

在Java中判断一个数字是否是质数可以使用一些小技巧和算法。下面将介绍几种判断质数的方法。

方法一:暴力枚举

暴力枚举是最原始的方法,即从2开始到该数的开方,依次判断是否能整除该数,如果能整除,则不是质数,如果所有的都不能整除,则是质数。具体实现如下:

public static boolean isPrime(int n) {
    if (n <= 1) return false;

    for (int i = 2; i <= Math.sqrt(n); i++) {
        if (n % i == 0) {
            return false;
        }
    }

    return true;
}

方法二:优化暴力枚举

如果该数字是偶数,那么不可能是质数,所以可以先判断数字是否为偶数,如果是偶数,则直接返回false。然后再进行类似暴力枚举的判断,具体实现如下:

public static boolean isPrime(int n) {
    if (n <= 1 || (n > 2 && n % 2 == 0)) return false;

    for (int i = 3; i <= Math.sqrt(n); i += 2) {
        if (n % i == 0) {
            return false;
        }
    }

    return true;
}

方法三:厄拉多塞筛法

厄拉多塞筛法是一种很高效的算法,它的基本思路是从2开始,将每个素数的倍数都标记成合数,然后再找到下一个素数,重复以上操作。具体实现如下:

public static boolean isPrime(int n) {
    if (n <= 1) return false;

    boolean[] isPrime = new boolean[n + 1];

    Arrays.fill(isPrime, true);
    isPrime[0] = false;
    isPrime[1] = false;

    for (int i = 2; i <= Math.sqrt(n); i++) {
        if (isPrime[i]) {
            for (int j = i * i; j <= n; j += i) {
                isPrime[j] = false;
            }
        }
    }

    return isPrime[n];
}

方法四:米勒-拉宾质数检验

米勒-拉宾质数检验是一种很高效的随机算法,它的基本思路是通过随机生成一个数x,然后判断n是否是x的幂次,如果不是,则可以认为n是合数,如果是则可能是质数。具体实现如下:

public static boolean isPrime(int n) {
    if (n <= 1) return false;
    if (n <= 3) return true;

    int k = 5;

    while (k-- > 0) {
        int a = (int) (Math.random() * (n - 3) + 2);
        int x = a % n;

        for (int i = 0; i < n - 1; i++) {
            x = (x * x) % n;

            if (x == 1) {
                break;
            }

            if (x == n - 1) {
                return true;
            }
        }

        if (x != n - 1) {
            return false;
        }
    }

    return true;
}

以上就是几种在Java中判断一个数字是否是质数的方法,可以根据实际情况选择最适合的方法。