检查给定数字是否为素数的程序

时间:2013-11-18 21:46:20

标签: java primes

你好,我在这里得到的小程序,检查给定的数字是素数,但我不理解for循环的一些部分,我需要你的帮助。 这是代码:

public class PrimeNumber
{
    public static void main(String args[])
    {

        int number;
        boolean prime;
        /*
            *is a natural number greater than 1 that has no positive divisors other 
            *than 1 and itself.
            * such as: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 
            * 61, 67, 71, 73, 79, 83, 89, 97, 101, and so on.
            */
        number =23;

        if(number<2)  
            prime=false; 
        else
            prime=true; 
        for(int i=2; i <=number/2; i++) 
        {
            if ((number%i) ==0) 
            { 
                prime =false; 
                break;
            }
        }
        if(prime) System.out.println("It is prime number");
        else System.out.println("it is not prime number");
    }
}

我理解,首先如果函数检查给定的数字是否高于2,如果不是 素数将是假的,如果它将是真的。 然后在for循环中我认为int是2,因为2是最小的素数? 我理解&lt; =这个操作员检查我是否小于或等于数字,但我不明白为什么我们使用数字/ 2?为什么我们必须检查这两个数字之间是否有休息,如果函数?

2 个答案:

答案 0 :(得分:3)

作者最多只检查n/2,因为如果2是可能的最小因素,那么n/2是最大的因子除数(?) 。虽然它不是最大可能的因素,但算法编写者肯定地知道没有因素可能大于n/2

然后,作者使用n % i == 0检查该数字是否可以被该范围内的任何数字整除。如果是,那绝对不是一个主要的。

请记住,这不是最有效的检查方式。见Which is the fastest algorithm to find prime numbers?

答案 1 :(得分:0)

你需要检查number除了1和它本身之外没有任何除数, 如果您在number/2之前检查了所有整数,那么显然,您不需要检查更多数字,因为i number i>number/2 number/i for(int i=2; i <=number/2; i++) for(int i=2; i <=sqrt(number); i++) {1}}不是除数。

使用相同的逻辑,您可以通过替换此行来提高效率:

{{1}}

这一行:

{{1}}