我写了一个程序来检查一个数字是否是素数。我想使用以下方法检查数字是否为素数:对于数字P,取p-1的阶乘,然后将1加到结果中。最后通过p对结果进行分类。对于你不知道的剂量,如果结果是一个整数,那么它是一个素数。
无论如何我的代码可以达到素数167,但是对于任何大于167的数字,我都会出现NaN错误。
任何身体斑点都有错吗?
import java.util.Scanner;
public class work {
public static void main(String arg[]) {
System.out.println("Please enter a number to check if its a prime");
Scanner in = new Scanner( System.in );
int num = in.nextInt();
double t = 1;
for (int i=1; i<num; i++){
t = i * t;
}
t = t+1;
t = t / num;
System.out.println(t%1);
if ((t%1 ==0.0) && (t!= 2)){
System.out.println("it is prime");
}
else{
System.out.println("it is not a prime");
}
}
}
答案 0 :(得分:3)
嗯,双变量可以容纳的数字是有限的。 166!是一个很大的数字。最大的双倍是1.7976931348623157E308
。 170!是7.257415615307994E306
。
您可以改用BigInteger。
答案 1 :(得分:1)
static boolean isPrime(long n) {
BigInteger num = BigInteger.valueOf(n);
BigInteger t = BigInteger.ONE;
for (BigInteger i = BigInteger.ONE; i.compareTo(num) < 0; i = i.add(BigInteger.ONE))
t = t.multiply(i);
t = t.add(BigInteger.ONE);
return t.mod(num).equals(BigInteger.ZERO);
}