java - 检查大 int 值是否为质数,Java 中的 BigInteger 问题

标签 java

我试图看看大数是否是质数,长度为11的数字。这是我正在使用的代码:

private static boolean isPrime(BigInteger eval_number){

        for(int i=2;i < eval_number.intValue();i++) {
            if(eval_number.intValue() % i==0)
                return false;
        }
        return true;

    }

现在我在调试器中检查的数字是 eval_number ,它等于 11235813213。但是,当我在调试器中检查 eval_number.intValue() 而不是 11235813213 时,该值是 -1649088675。这是怎么发生的?另外,检查大数以确定它们是否是素数的更好方法是什么?

最佳答案

这个奇怪的值是溢出的结果。 BigInteger 实例保存的数字大于 2^31-1 (Integer.MAX_VALUE),因此不能用 int 表示>。对于 primcheck:BigInteger 提供 isProbablePrime(int)还有其他几种快速(或多或少)的算法可以检查一个数字是否是具有给定失败率的素数。如果您希望获得 100% 的确定性,可以通过将要检查的数字上限减少到 sqrt(input) 并将步长增加 2 来优化代码。或者,如果该算法被多次使用,则生成一个 prim-table。

关于java - 检查大 int 值是否为质数,Java 中的 BigInteger 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31892936/

相关文章:

java - 多线程非阻塞 IO 选择器

java - java小程序中的JComboBox和JTable

java - Jni jintArray 参数错误

java - 访问级联 ArrayList 中包含的特定对象

java - PLS-00306 : wrong number or types of arguments in call to GET_NEW_EVENTS in Java

java - 如何通过 Selenium 关闭对话框?

java - java中n*4表的数据结构

java - 将 Map<T> 转换为派生类

java - 4 个线程添加到一个 jlist

java - 为什么 Collections 类中的不可修改方法不使用新元素创建集合?