Solution - Check Prime Number
Problem.
Write a Java program that prompts the user to enter an integer and then checks whether that integer is a prime number. A prime number is a positive integer greater than 1 that has no positive integer divisors other than 1 and itself.
编写一个 Java 程序,提示用户输入一个整数,然后检查该整数是否为质数。质数是一个大于 1 的正整数,除了 1 和它本身之外没有正整数因子。
Solution.
import java.util.Scanner;
public class PrimeChecker {
public static void main(String[] args) {
// 从键盘输入一个数
Scanner input = new Scanner(System.in);
System.out.print("Enter a positive integer: ");
int num = input.nextInt();
input.close();
// 调用isPrime()方法,检验输入的整数是不是质数
if (isPrime(num)) {
System.out.println(num + " is a prime number.");
} else {
System.out.println(num + " is not a prime number.");
}
}
// method to check whether a number is prime
static boolean isPrime(int num) {
if (num == 2) return true; //如果是2,返回true;
//程序如果运行到这里,num不可能是2
if (num <= 1 || num % 2 == 0) {
System.out.printf("%d = %d * %d \n",num, 2, num/2); //打印分解方案
return false;
} //如果输入的数小于等于1,或者是偶数,那么不是质数,返回false (注:这里num不可能是2)
//程序如果运行到这里,num就 不可能 小于等于1或者是偶数
// 开始除以3,5,7,...,因为所有的偶数在前面以及判断过了,这里只判断是否可以被奇数整除
int sr = (int) Math.sqrt(num);
for (int i = 3; i <= sr; i+=2) {
if (num % i == 0) {
System.out.printf("%d = %d * %d \n",num, i, num/i); //打印分解方案
return false;
}
}
return true;
}
}
该程序首先提示用户输入一个正整数,并使用 Scanner 读取输入。然后,它调用一个名为 isPrime() 的辅助方法来检查该数字是否为质数。isPrime() 方法使用一个简单的算法来检查:
- 该数字是不是2?如果是,返回true(跳过后续代码,否则,继续执行后续的代码);
- 该数字是否小于等于1或者可以被2整除?如果是,返回false(跳过后续代码,否则继续执行后续的代码);
- 该数字是否可以被3 到 它平方根的一个奇数整除?如果是,打印分解方案,然后返回false (最后一行的return true会被跳过);
- 如果for循环检验完毕也没有返回false,说明没有找到可以整除它的数,该数字是个质数,返回 true。
最后,主方法根据 isPrime() 的返回值输出指示该数字是否为质数的消息。
Tips.
- 如果
if
后{}
的代码块只有一行,可以省略花括号{}
.比如
if (num == 2) return true;
,等价于if (num == 2) {return true;}