编译时我没有收到错误,但实际上并不是FACTOR!但是,它会打印出我在那里放置的“测试”一行,以确保它一直在运行。 这是代码:
import java.math.BigInteger;
public class test {
public static void main(String[] Args) {
System.out.println("Testing");
BigInteger a=BigInteger.valueOf(99);
BigInteger i=BigInteger.valueOf(1);
while (i.compareTo(a) < 0 ) {
if ((a.mod(i)) == BigInteger.ZERO) {
System.out.println(i);
i=i.add(BigInteger.ONE);}
else {i=i.add(BigInteger.ONE);}
}
}
}
这不适用于家庭作业;我是一个试图计算大于64位的东西的书呆子!我在大学学习VB而不是Java,所以在今天之前我还没有和BigInteger合作过。
答案 0 :(得分:2)
我尝试运行您在OpenJDK 7上提供的确切代码并获得以下输出:
Testing
1
3
9
11
33
可能是您的JRE的BigInteger实现为零创建了BigIntegers的新实例,而不是重新使用现有的BigInteger.ZERO
实例。您应该使用.equals()
代替==
来比较对象;即使你有两个零实例,这应该可以工作。
答案 1 :(得分:1)
我强烈建议不要遍历整个BigInteger a
。相反,您应该仅循环该值的一半,因为对于任何数字 N , N / 2是最大可能的因素。更优化的代码变为:
BigInteger maxFactor = a.divide(new BigInteger("2"));
while (i.compareTo(maxFactor) <= 0 ) {
if ((a.mod(i)).equals(BigInteger.ZERO))
System.out.println(i);
i=i.add(BigInteger.ONE);
}
你可以用一些数论来优化它,但我无法真正帮助你。