这是我的程序,在for
循环Math.sqrt(n)
内 - 我认为这是错误。
import java.util.Scanner;
public class PrimeNoCheck {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.print("Enter a number : ");
int n = s.nextInt();
if (isPrime(n)) {
System.out.println(n + " is a prime number");
} else {
System.out.println(n + " is not a prime number");
}
}
public static boolean isPrime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i < Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
}
答案 0 :(得分:3)
算法是: 要检查n是否为素数,您必须尝试将其除以所有数字,从2(1是无用的)到包含的sqrt(n)。
您不必在sqrt(n)之后检查,因为,如果n可以除以X, 大于sqrt(n),如果Y不是素数,它也可以除以Y(n / X),小于sqrt(n),或者除以Z,小于Y.
您的代码中的错误是您在sqrt(n)之前停止。
使用您的代码4,9,25,...被视为素数,而每个素数^ 2也被视为。
只需替换:&lt; =而不是&lt;
for (int i = 2; i <= Math.sqrt(n); i++) {