是否有 java std 方法,例如“静态布尔值 isPrime(int)”[关闭]

is there a java std method such as "static boolean isPrime(int)" [closed]

提问人:user502233 提问时间:10/3/2023 更新时间:10/3/2023 访问量:60

问:


我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便用事实和引文来回答。

上个月关闭。

是否有与“Math”类似的类来定义诸如“静态布尔值isPrime(int)”之类的方法。

Java 数学

评论

6赞 Jorn 10/3/2023
不。stdlib 中最接近的是 .BigInteger.isProbablePrime
0赞 Anonymous 10/3/2023
如果您搜索但没有找到它,那么可能没有。不过,如果您在第三方库中找不到它,我会感到惊讶。此外,您可以在不到 10 行的时间内编写一个朴素的方法(一个有效的方法需要更多)。
0赞 Luatic 10/3/2023
@user85421注意,概率素数检查是要走的路;幼稚的、100% 准确的“筛子”效率低得令人无法接受。通过为参数传递适当的高值,可以将概率主检查失败的几率保持在远低于发生硬件故障的几率。certainity
2赞 Jorn 10/3/2023
@Luatic 对于大数字来说确实如此,但筛选数字应该足够好且足够快。Integer.MAX_VALUE
0赞 Louis Wasserman 10/3/2023
guava.dev/IntMath 具有非常快速的实现速度。

答:

3赞 Codemaker2015 10/3/2023 #1

Java 标准库 (java.util) 没有提供专门命名的内置方法,用于检查给定整数是否为素数。如果要使用内置方法进行检查,请使用 .isPrime(int)BigInteger.isProbablePrime

import java.math.BigInteger;

public class PrimeChecker {
    public static void main(String[] args) {
        BigInteger bigInteger = new BigInteger("17");
        int certainty = 10;

        if (bigInteger.isProbablePrime(certainty))
            System.out.println(bigInteger + " is a prime number.");
        else
            System.out.println(bigInteger + " is not a prime number.");
    }
}

评论

1赞 Luatic 10/3/2023
为什么要使用如此低的确定性?
1赞 Codemaker2015 10/3/2023
如果我输入较大的确定性值,则需要花费很多时间来计算。较低的值适用于较小的数字。我想把它保持在最低限度。如果需要,我们可以增加价值。
0赞 Luatic 10/3/2023
测试给出错误结果的概率随着确定性呈指数下降,而运行时间仅线性增加 (IIRC),所以我不明白为什么你应该低到 .10