Java BigInteger的比较不起作用
我没有得到我期望的结果。这是一个素性测试。我真的不知道怎么了。要么我的循环工作不正常,要么这不正常Java BigInteger的比较不起作用,java,biginteger,Java,Biginteger,我没有得到我期望的结果。这是一个素性测试。我真的不知道怎么了。要么我的循环工作不正常,要么这不正常 n是一个大整数。它是由用户输入的长度随机生成的 public static boolean isPrime(BigInteger n) { BigInteger zero = new BigInteger("0"); BigInteger one = new BigInteger("1"); BigInteger two = new BigInteger("2");
n是一个大整数。它是由用户输入的长度随机生成的
public static boolean isPrime(BigInteger n) {
BigInteger zero = new BigInteger("0");
BigInteger one = new BigInteger("1");
BigInteger two = new BigInteger("2");
BigInteger three = new BigInteger("3");
System.out.println(n + " Mod 2 " + n.mod(two));
if (n.compareTo(one) == 0 || n.compareTo(one) < 0) {
//System.out.println("HIT1");
return false;
} else if (n.compareTo(three) == 0 || n.compareTo(three) < 0) {
//System.out.println("HIT2");
return false;
} else if ((n.mod(two)).compareTo(zero) == 0 || (n.mod(three)).compareTo(zero) == 0) {
//System.out.println("HIT3");
return false;
} else {
System.out.println("Heres n : " + n);
return true;
}
}
不要测试
compareTo()
的结果是否等于-1。当你想表示a
时,你应该将a.compareTo(b)<0
。始终与0比较,而不是任何其他常数。刚刚意识到问题所在。我在循环中和循环内部生成两个不同的数字。我还在循环中错误地分配了BigInteger。我应该做什么
num1=新的BigInteger(generateNumber(p).toString() 首先,测试数字是否为
2
(如果是,则为素数)。接下来,测试该数字是否可被2
整除(如果是,则它不是素数)。接下来,以2
的增量从3
迭代到数字的平方根,测试与原始数字的可除性(如果是,则它不是素数)。否则,该数字为素数。大概
public static boolean isPrime(BigInteger n) {
final BigInteger two = new BigInteger("2");
if (n.equals(two)) {
return true;
}
if (n.mod(two).equals(BigInteger.ZERO)) {
return false;
}
for (BigInteger i = two.add(BigInteger.ONE); i.multiply(i).compareTo(n) < 1;
i = i.add(two)) {
if (n.mod(i).equals(BigInteger.ZERO)) {
return false;
}
}
return true;
}
public静态布尔值isPrime(biginger n){
最终的BigInteger 2=新的BigInteger(“2”);
如果(n等于(2)){
返回true;
}
if(n.mod(2).equals(BigInteger.ZERO)){
返回false;
}
对于(biginger)i=2.add(biginger.ONE);i.multiply(i).compareTo(n)<1;
i=i.add(两个)){
if(n.mod(i).等于(BigInteger.ZERO)){
返回false;
}
}
返回true;
}
什么是n
首先?而且,我在这里没有看到任何循环!你给出了什么样的输入,你得到了什么样的输出,以及该输出如何不符合你的期望?n是一个大整数。这是由用户输入的长度随机生成的。我一直得到偶数。有时我甚至得到一个。它不应该输出给第一个IF语句。compareTo(one)=0 | | n.compareTo(one)<0模式可以简化并优化为n.compareTo(one)是有意义的,尝试过,但有时我仍然会得到一个。
public static boolean isPrime(BigInteger n) {
final BigInteger two = new BigInteger("2");
if (n.equals(two)) {
return true;
}
if (n.mod(two).equals(BigInteger.ZERO)) {
return false;
}
for (BigInteger i = two.add(BigInteger.ONE); i.multiply(i).compareTo(n) < 1;
i = i.add(two)) {
if (n.mod(i).equals(BigInteger.ZERO)) {
return false;
}
}
return true;
}