java - 您如何将 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 只是我发现的第一件事。至于在其他地方查找,网上的很多说明太复杂了,或者我只是不明白他们在说什么。
这是我第一次提出问题,所以我不知道它是否太长和多余,如果是的话,我很抱歉,但提前感谢任何回答我问题的人。
解决方案
要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);
}
}
推荐阅读
- postgresql - Postgres 如何在套接字协议方面支持异步(非块)运算符?
- reactjs - 在 reactjs 项目中构建服务层的一般可接受的方法是什么?
- amazon-web-services - 启用“请求者付费”的 AWS S3 存储桶仍会产生数据传输成本
- sitecore - 具有不同项目解决方案的单个 Sitecore 实例
- php - Ubuntu和php7.4上的Laravel我只能看到带有文件和文件夹的页面
- javascript - React Router 推送到状态警告
- node.js - 为什么 fs.watch 仅在我打开正在监视的文件时触发?
- neo4j - 编写一个查询返回neo4j中两个节点之间的补充关系
- virtualbox - oracle virtual box中虚拟机的命令行安装
- machine-learning - 我在哪里可以为我的机器学习项目获取大量图像?