我没有得到我期待的输出。这是一个素性测试。我不确定是什么问题。我的循环无法正常工作,或者这不是。
n是一个BigInteger。它是由用户输入的长度随机生成的。
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;
}
}
这是我的循环。我确信我的数字生成器可以工作。
do {
num1 = generateNumber(p);
} while (isPrime(generateNumber(p)) == false);
do {
num2 = generateNumber(q);
} while (isPrime(generateNumber(q)) == false);
答案 0 :(得分:1)
不要测试compareTo()
的结果是否等于-1。如果您想表示a < b
,则应撰写a.compareTo(b) < 0
。始终与0比较,而不是任何其他常数。
答案 1 :(得分:0)
刚刚意识到问题所在。我在循环和循环内部生成两个不同的数字。我也错误地在循环中错误地分配BigInteger。我应该这样做 num1 = new BigInteger(generateNumber(p).toString());
答案 2 :(得分:0)
首先,测试数字是2
(如果是,那么它是素数)。接下来,测试数字是否可以被2
整除(如果是,那么它不是素数)。接下来,从3
迭代到数字的平方根,以2
为增量,用原始数字测试可分性(如果是,那么它不是素数)。否则,数字是素数。像,
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;
}