1

编译时我没有收到错误,但它实际上并不是 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。

4

2 回答 2

2

我尝试运行您在 OpenJDK 7 上提供的确切代码并得到以下输出:

Testing
1
3
9
11
33

可能是您的 JRE 的 BigInteger 实现为零创建了 BigIntegers 的新实例,而不是重新使用现有BigInteger.ZERO实例。您应该使用.equals()而不是==比较对象;即使您有两个零实例,这也应该有效。

于 2012-11-04T06:30:22.260 回答
1

我也强烈建议不要循环遍历整个BigInteger a. 相反,您应该只循环该值的一半,因为对于任何数字NN /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);
}

您可以通过一些数论对其进行更多优化,但我无法真正帮助您。

于 2012-11-04T06:37:17.950 回答