使用BigInteger类的最大素因子 成套练习; 导入java.math.biginger; 公共类最大因子{ 公共静态void main(字符串[]args){ BigInteger x=新的BigInteger(“600851475143”); BigInteger素数=新的BigInteger(“0”); 对于(biginger i=new biginger(“2”);i.compareTo(x.divide(new biginger(“2”))

使用BigInteger类的最大素因子 成套练习; 导入java.math.biginger; 公共类最大因子{ 公共静态void main(字符串[]args){ BigInteger x=新的BigInteger(“600851475143”); BigInteger素数=新的BigInteger(“0”); 对于(biginger i=new biginger(“2”);i.compareTo(x.divide(new biginger(“2”)),java,prime-factoring,Java,Prime Factoring,因此,我试图找到600851475143的最大主因子,但当我运行它时,它不会显示任何内容,并且它一直在运行。如何修复此问题?这里有一个错误。 if(x.mod(i)=新的大整数(“0”) 假设x=2,i=2,然后x%i=0,但是这里将返回一个false,因为=将比较变量的地址而不是值。equals是首选 正如@Zabuza所建议的,我找到了一个关于 首先,您可以使用更有效的素数检查。您需要查找特定数字的最大素数因子(600851475143)还是输入不是常量?对于这个数字,您是否使用了一些较小

因此,我试图找到600851475143的最大主因子,但当我运行它时,它不会显示任何内容,并且它一直在运行。如何修复此问题?

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



正如@Zabuza所建议的,我找到了一个关于

首先,您可以使用更有效的素数检查。您需要查找特定数字的最大素数因子(
600851475143
)还是输入不是常量?对于这个数字,您是否使用了一些较小的数字(
<100
)进行了测试一般来说,你知道正确的结果,从而可以确认你的算法是否有效?@Zabuza nope你可以在早上做这件事,你可以通过添加一个解释
等于
==
之间差异的资源来改进答案,例如另一个答案不错的SO问题,如果你愿意的话,您可以在第一个for循环
System.out.println(“debug”+i)中打印调试消息
@Zabuza这么短是什么意思?那么代表StackOverflow,那么我们现在所在的站点:)
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;
    }
}