我正在尝试创建一个应用程序,以检查特定数字是否为素数。 由于数字大于int或long的值,我不得不使用BigInteger,但我对它的了解很少,所以我就碰壁了。 我正在做的是检查n是否可以被奇数(i)分割,直到我到达n的根。 n(10 ^ 24 + 7)的值是素数,我想检查更大的数字,如10 ^ 128 + 7。我很感激任何帮助。
import javax.swing.*;
import java.math.*;
public class prime {
public static void main(String[] args) {
BigInteger n = new BigInteger("1000000000000000000000007");
BigInteger h = new BigInteger("2");
int r;
for(BigInteger i = new BigInteger("3");n.compareTo(i.multiply(BigInteger.valueOf(i)))>=0;i.add(BigInteger.valueOf(h))) {
if(n.divideAndRemainder(i)==0){
r=0;
}else{
r=1;}
}
if(r=0){
System.out.println("not prime");}else{
System.out.println("prime");}
}
}
答案 0 :(得分:0)
正确的操作是BigInteger.mod(BigInteger)
(你只关心其余部分); 或使用BigInteger.isProbablePrime(int)
。将逻辑提取到方法中也更好。像,
static boolean isPrime(BigInteger n) {
BigInteger TWO = BigInteger.ONE.add(BigInteger.ONE);
if (n.mod(TWO).equals(BigInteger.ZERO)) {
return false;
}
BigInteger h = TWO.add(BigInteger.ONE);
// for (; h * h < n; h += 2)
for (; h.multiply(h).compareTo(n) < 0; h = h.add(TWO)) {
if (n.mod(h).equals(BigInteger.ZERO)) {
return false;
}
}
return true;
}