我用int写了一个简单的保理程序。将它转换为BigInteger(SAME结构!)不起作用!为什么不?

时间:2012-11-04 05:20:09

标签: java biginteger

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

2 个答案:

答案 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);
}

你可以用一些数论来优化它,但我无法真正帮助你。