首页 > 解决方案 > 您如何将 BigInteger 与 for 循环和修改 BigIntegers 一起使用?

问题描述

所以在我的计算机科学课上,我们一直在学习如何使用 java 进行编码,而我遇到了编码本身的第一个限制。问题是long只允许您存储最多 64 位或接近的数字。因此,我们已经开始使用 16 位数字进行质数检测,并查看计算机进行计算需要多长时间,但我希望超越这个 16 位限制。所以我研究了 BigIntegers,坦率地说我不知道​​如何使用它们。我知道您必须导入它们并使变量等于 BigInteger 值,但是当我将该变量插入 for 循环时,它会出现以下错误:

线程“main”java.lang.Error 中的异常:未解决的编译问题:
Math 类型中的方法 sqrt(double) 不适用于参数 (BigInteger)
运算符 % 未定义参数类型 BigInteger, long
在 PrimeNumbers.main(PrimeNumbers.java:16)

这是我的代码:

import java.math.BigInteger;

    Scanner input = new Scanner(System.in);

    BigInteger number;
    number = new BigInteger("48112959837082048697");

    System.out.println(number);

    for(long x = 2; x < Math.sqrt(number); x++) {
        if(number % x == 0) {
            System.out.println("not a prime");
        }
    }
    System.out.println("Prime");

总而言之,我只希望我的 for 循环检查数字,如果有使用 BigInteger 的解决方法,那也很棒。BigInteger 只是我发现的第一件事。至于在其他地方查找,网上的很多说明太复杂了,或者我只是不明白他们在说什么。

这是我第一次提出问题,所以我不知道它是否太长和多余,如果是的话,我很抱歉,但提前感谢任何回答我问题的人。

标签: java

解决方案


BigInteger正确使用,您需要使用它的方法https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/math/BigInteger.html

所以在你的情况下。

    for (BigInteger x = new BigInteger("2"); x.pow(2).compareTo(number) < 0; x = x.add(BigInteger.ONE)) {
        if (number.mod(x).compareTo(BigInteger.ZERO) == 0) {
            System.out.println("not a prime dividable by" + x); 
        }
    }

推荐阅读