需要帮助解释此素数程序的工作原理

时间:2018-11-04 06:44:27

标签: java

我这里有这段代码,要求用户输入数字,然后调用isPrime方法来计算数字是否为质数。然后将结果打印到屏幕上。为了使此代码正常工作,我做了很多次试验和尝试,但是我并不太了解该程序的工作原理。例如,如果我输入9,则代码将给我余数,该余数应返回true,应使9为质数,但不是,程序正常工作,说9不是质数。只是想知道它为什么起作用。

package homework_chap5;
import java.util.Scanner;

public class Homework_Chap5 {

            //Pg 313 #7

    public static void main(String[] args) {
       Scanner s = new Scanner(System.in);
     System.out.print("Enter number: ");
        int num = s.nextInt();

            if(isPrime(num)) {

                System.out.println("Number is prime");

            } else {

                System.out.println("Number is not prime");
            }   

    }         

         public static boolean isPrime(int num)
    {


        for(int i = 2; i <= num/2; i++)
        {
            if (num%i==0)
            {
             return false;
            }

        }
        return true;

    }
}

2 个答案:

答案 0 :(得分:1)

  

例如,如果我输入9,则代码会将余数还给我,这应返回true

否,对于i==2num%i==0false将是i==3,但是循环将继续检查num%i==0是否isPrime 。这次条件将为true,并且false方法将返回num

仅在循环结束之后,此时我们知道i不能被测试的num的任何值整除,该方法将得出结论true是质数并返回d = {[0.0 - 0.1): "a", [0.1 - 0.3): "b", [0.3 - 0.55): "c", [0.55 - 0.7): "d", [0.7 - 1.0): "e"}

答案 1 :(得分:0)

根据定义,a number is prime if it is divisible by only 1 and itself。同样,除了检查数字num的可除数是否为1到num之间的所有数之外,还可以检查数字1到num/2的可除数是否足够,因为没有数字大于数字的中间值num完美地将数字相除。因此,从2到num/2,看看是否有任何数字将数字num相除,即num%i == 0,其中i在[2,num / 2]范围内。如果存在任何此类i,则该数字不是素数。如果没有i在[2,num / 2] num%i == 0范围内,则num为质数。

但是,可以通过检查[2, sqrt(num)]范围内的所有数字(而不是[2,num/2])对num的可除性来优化代码。您可以检查自己的效率。