使用BigInteger类的最大素数因子

时间:2017-07-29 20:43:21

标签: java prime-factoring

package Exercises;
import java.math.BigInteger;
public class LargestPrimeFactor {

    public static void main(String[] args) {
        BigInteger x = new BigInteger ("600851475143");
        BigInteger prime = new BigInteger ("0");

        for (BigInteger i = new BigInteger("2"); i.compareTo(x.divide(new BigInteger("2"))) < 1; i = i.add(new BigInteger("1")))
        {
            if (x.mod(i) == new BigInteger ("0"))
                if (isPrime(i))
                    prime = i;
        }
        System.out.println(prime);
    }

    public static boolean isPrime (BigInteger number)
    {
        for (BigInteger i = new BigInteger("2"); i.compareTo(number.divide(new BigInteger("2"))) < 1; i = i.add(new BigInteger("1")))
        {
            if (number.mod(i) == new BigInteger("0"))
                return false;
        }
        return true;
    }
}

所以我试图找到600851475143的最大素数因子但是当我运行它时它没有显示任何东西并且它一直在运行我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

这里有一个错误。 if (x.mod(i) == new BigInteger ("0")) 假设x=2, i=2,然后是x%i=0,但这里会返回false,因为==会比较变量的地址而不是值。equals是一个首选。

正如@Zabuza建议的那样,我找到了关于difference between == and equals的资源。