找出4号是否是素数?

时间:2015-12-01 14:56:38

标签: java

这是我的程序,在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;
    }
}

1 个答案:

答案 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++) {