当前位置:首页 > Java

java如何表示质数

2026-03-26 00:48:01Java

判断质数的方法

质数是指大于1的自然数,除了1和它本身外没有其他约数。在Java中可以通过以下方式判断一个数是否为质数:

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;
}

优化质数判断

对于较大的数,可以采用更高效的算法如Miller-Rabin素性测试:

public static boolean isPrimeMillerRabin(int n, int k) {
    if (n <= 1 || n == 4) return false;
    if (n <= 3) return true;

    int d = n - 1;
    while (d % 2 == 0) {
        d /= 2;
    }

    for (int i = 0; i < k; i++) {
        if (!millerTest(d, n)) {
            return false;
        }
    }
    return true;
}

private static boolean millerTest(int d, int n) {
    int a = 2 + (int)(Math.random() % (n - 4));
    int x = modPow(a, d, n);
    if (x == 1 || x == n - 1) return true;

    while (d != n - 1) {
        x = (x * x) % n;
        d *= 2;
        if (x == 1) return false;
        if (x == n - 1) return true;
    }
    return false;
}

private static int modPow(int a, int d, int n) {
    int res = 1;
    a = a % n;
    while (d > 0) {
        if ((d & 1) == 1) {
            res = (res * a) % n;
        }
        d = d >> 1;
        a = (a * a) % n;
    }
    return res;
}

生成质数列表

生成指定范围内的所有质数可以使用埃拉托斯特尼筛法:

public static List<Integer> sieveOfEratosthenes(int n) {
    boolean[] prime = new boolean[n + 1];
    Arrays.fill(prime, true);
    prime[0] = false;
    prime[1] = false;

    for (int p = 2; p * p <= n; p++) {
        if (prime[p]) {
            for (int i = p * p; i <= n; i += p) {
                prime[i] = false;
            }
        }
    }

    List<Integer> primes = new ArrayList<>();
    for (int i = 2; i <= n; i++) {
        if (prime[i]) {
            primes.add(i);
        }
    }
    return primes;
}

使用BigInteger类

对于非常大的质数,可以使用Java的BigInteger类:

java如何表示质数

import java.math.BigInteger;

public static boolean isBigPrime(BigInteger num) {
    return num.isProbablePrime(100); // 确定性参数
}

这些方法覆盖了从基本质数判断到处理大质数的各种场景,可以根据具体需求选择合适的方法。

标签: 质数表示
分享给朋友:

相关文章

js实现质数

js实现质数

判断一个数是否为质数 质数是指大于1的自然数,除了1和它本身外,没有其他正因数。以下是用JavaScript实现判断质数的方法: function isPrime(num) { if (num…

php如何实现质数

php如何实现质数

PHP 实现质数的方法 质数是指大于1的自然数,除了1和它本身外没有其他约数。以下是几种在PHP中实现质数判断和生成的方法: 判断一个数是否为质数 使用循环和条件判断来检查一个数是否为质数:…

java如何表示

java如何表示

Java 基本数据类型表示 Java 中的基本数据类型用于表示简单的数据值,包括整数、浮点数、字符和布尔值。 整数类型 byte:8 位,范围 -128 到 127 byte b = 1…

java 平方如何表示

java 平方如何表示

Java 中平方的表示方法 在 Java 中,平方可以通过多种方式实现,以下是几种常见的方法: 使用 Math.pow 方法 Math.pow 是 Java 内置的数学函数,用于计算一个数的幂次方。…

js实现质数

js实现质数

判断质数的基本方法 质数是大于1的自然数,除了1和它本身外没有其他约数。在JavaScript中可以通过循环和条件判断实现质数检测。 function isPrime(num) { if (nu…

质数js实现

质数js实现

判断质数的基本方法 质数是指大于1的自然数,且只能被1和它本身整除。在JavaScript中,可以通过以下方式实现质数判断: function isPrime(num) { if (num…