【发布时间】:2025-11-25 10:00:02
【问题描述】:
我正在尝试验证输入的 BigInteger 数字是否为 Prime Number!
但是,对于像 13,31 这样的较小数字,它运行良好,但在 15 的情况下会产生错误;通过将其声明为 Prime。我无法找出错误,可能它隐藏在涉及 binary-search 的 squareroot() 方法 方法中!
请查看代码并帮我指出错误!!!
调用代码:-
boolean p=prime(BigInteger.valueOf(15));
System.out.println("P="+p);
调用代码:-
public static boolean prime(BigInteger bi2){
if(bi2.equals(BigInteger.valueOf(2)) || bi2.equals(BigInteger.valueOf(3)))
{
return true;
}
BigInteger bi,bin;
bin=squareroot(bi2);
for(bi=BigInteger.valueOf(2);bi.compareTo(bin)<=0;bi=bi.add(ONE)){
if(bi2.mod(bi).equals(ZERO))
return false;
else continue;
}
return true;
}
public static BigInteger squareroot(BigInteger bi){
BigInteger low,high,mid=ZERO,two;
low=ONE;
high=bi;
two=BigInteger.valueOf(2);
while(low.compareTo(high)<0)
{
mid =(BigInteger)(low.add(high)).divide(two);
//System.out.println("Low-Mid-High="+low+" "+mid+" "+high);
if(mid.multiply(mid).compareTo(bi)==0)
return mid;
if(mid.multiply(mid).compareTo(bi)>0)
high = mid.subtract(ONE);
else if(mid.multiply(mid).compareTo(bi)<0)
low = mid.add(ONE);
}
return mid;
}
【问题讨论】:
-
我认为这里的部分挑战是从头开始实现所有方法?因此平方根实现?
-
我强烈建议使用调试器逐步完成此操作。相信你会在几秒钟内找到问题。
-
15(和大多数数字)的平方根不是整数,因此您的平方根函数将无法找到正确的答案。例如,对于 15,它返回 2 的平方根。
-
不,@shekhar,尝试通过您的
squareroot函数运行 15。无论您相信谁,它都会返回 2。 -
你不觉得反驳正确指出你错误的两个人有点粗鲁吗?
标签: java primes biginteger binary-search square-root