本题的目标很简单,就是判断一个给定的正整数是否素数。
输入格式:
输入在第一行给出一个正整数N(≤ 10),随后N行,每行给出一个小于231的需要判断的正整数。
输出格式:
对每个需要判断的正整数,如果它是素数,则在一行中输出Yes,否则输出No。
输入样例:
2
11
111
输出样例:
Yes
No
解题思路
- 知道什么是素数:定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,素数有无穷多个
- 验证素数时就只需要验证到其平方根就可以了。即一个合数一定含有小于它平方根的质因子
解题中遇到的问题
如果没有判断输入的数字是不是有小于2的话,会有一个案例过不了的!!!
// 小于2的数不是素数
if (number < 2) {
return false;
}
代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
for (int i = 0; i < N; i++) {
int number = scanner.nextInt();
System.out.println(isPrime(number) ? "Yes" : "No");
}
}
private static boolean isPrime(int number) {
// 小于2的数不是素数
if (number < 2) {
return false;
}
// 检查从2到sqrt(number)之间的数是否能整除number
for (int i = 2; i <= Math.sqrt(number); i++) {
if (number % i == 0) {
return false;
}
}
return true;
}
}