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

Java中如何实现判断是否为质数的函数?

发布时间:2023-07-27 20:43:09

在Java中,判断一个数是否为质数可以利用以下几种方法:

1. 简单地对每个小于该数的正整数进行除法检查,判断是否能整除该数。如果存在能整除该数的数,则该数不是质数;否则,该数为质数。该方法的时间复杂度为O(n)。

public static boolean isPrime(int num) {
    if (num <= 1) {
        return false;
    }
    for (int i = 2; i <= Math.sqrt(num); i++) {
        if (num % i == 0) {
            return false;
        }
    }
    return true;
}

2. 对于一个数n,如果它不是质数,则必定存在两个因子a和b,且满足2 <= a <= b <= √(n)。因此,只需要在[2, √(n)]之间遍历,检查是否有满足条件的因子。该方法的时间复杂度为O(√n)。

public static boolean isPrime(int num) {
    if (num <= 1) {
        return false;
    }
    for (int i = 2; i*i <= num; i++) {
        if (num % i == 0) {
            return false;
        }
    }
    return true;
}

3. 利用质数的性质,根据素数筛法(Sieve of Eratosthenes)先生成一个质数表,再通过查表的方式进行判断。该方法的时间复杂度为O(nlog(logn))。

public static boolean isPrime(int num) {
    if (num <= 1) {
        return false;
    }
    boolean[] isPrime = new boolean[num+1];
    Arrays.fill(isPrime, true);
    isPrime[0] = isPrime[1] = false;

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

以上是常用的几种方法判断一个数是否为质数,在实际应用中可以根据具体需要选择合适的方法。