Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将BigInteger用于for循环和修改BigInteger?_Java - Fatal编程技术网

Java 如何将BigInteger用于for循环和修改BigInteger?

Java 如何将BigInteger用于for循环和修改BigInteger?,java,Java,所以在我的计算机科学课上,我们一直在学习如何用java编码,我遇到了编码本身的第一个局限性。问题是long只允许存储多达64位或接近64位的数字。我们已经开始用16位数字进行素数检测,看看计算机进行计算需要多长时间,但我希望能超越16位的限制。所以我研究过大整数,坦率地说,我不知道如何使用它们。我知道您必须导入它们并使变量等于BigInteger值,但当我将该变量插入for循环时,会出现以下错误: 线程“main”java.lang中出现异常。错误:未解决的编译问题: Math类型中的方法sqr

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

线程“main”java.lang中出现异常。错误:未解决的编译问题:
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");
import java.math.biginger;
扫描仪输入=新扫描仪(System.in);
大整数;
数字=新的大整数(“48112959837082048697”);
系统输出打印项次(编号);
for(长x=2;x
总之,我只想让我的for循环检查数字,如果有一个使用BigInteger的解决方法,那也很好。BigInteger只是我发现的第一件事。至于在别处查找,网上的很多说明太复杂了,或者我还不明白他们在说什么


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

要正确使用
BigInteger
,您需要了解它的方法

你的情况也是如此

    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); 
        }
    }
for(biginger x=new biginger(“2”);x.pow(2).比较(数字)<0;x=x.add(biginger.ONE)){
if(number.mod(x).compareTo(BigInteger.ZERO)==0){
System.out.println(“不是可除以“+x”的素数);
}
}

16位=2^16。16位表示10^16。它们甚至都不接近彼此的比例。我的错,是指64位。值得一看,你在数学上实际上在做什么。即使编译了这个函数,在任何大到需要
biginger
的整数上运行它也会太慢。您必须使用
biginger\someMethod(
…这就是重点。我们需要长时间的计算,所以我想把它做得更大,把它放慢到可能需要半天才能处理的程度。啊,好吧,这更有意义。我会摆弄它,但就像我说的,这更有意义。谢谢。补充一点(正如@ValentinoRozzi似乎刚刚开始):int、long(以及其他)是Java的基本数字数据类型,因此您可以对它们使用像
%
这样的运算符。BigInteger是一个复杂的类,允许您对大数进行数学运算,但不能使用基本操作数(Java没有运算符重载)因此,它提供了自己的数学函数,例如
biginger largeMod=largeNumber.mod(另一个largeNumber);
快乐Coding@deR_Ed好的,我想做一些类比。由于我正在导入它,这意味着它不是传统java的一部分,所以正如你所说,你不能使用传统的操作数?@ValentinoRozzi不幸的是,兔子洞更深了(看看这里,例如:).但现在-是的,如果需要导入,您不能使用“传统”运算符。我强烈建议您阅读一些有关此主题的材料(它也可能很快成为您的cs课程的一部分)@哦,我的天,是的,我肯定要做一些研究。我肯定我的老师会谈论原语,但我怀疑它会深入到那个程度,因为它只是一个高中班(即使是美联社).但这为编码增加了一个我不知道存在的元素,并且肯定为它提供了比我最初考虑的更多的可能性。谢谢,所有的帮助。