我这里有这段代码,要求用户输入数字,然后调用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;
}
}
答案 0 :(得分:1)
例如,如果我输入9,则代码会将余数还给我,这应返回true
否,对于i==2
和num%i==0
,false
将是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的可除性来优化代码。您可以检查自己的效率。