题目描述
输入一个正整数n,判断n是否是素数,若n是素数,输出”Yes”,否则输出”No”。 注意:1不是素数。
输入
输入一个正整数n(n<=1000)
输出
如果n是素数输出"Yes",否则输出"No"。输出占一行。
样例输入
2
样例输出
Yes
先调到java再提交
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
String str = "Yes";
if(n != 1)
{
for(int i = 2;i <= Math.sqrt(n);i++)
if(n % i == 0)
str = "No";
}
else
str = "No";
System.out.print(str);
}
}
至于为何判断素数时只需要遍历2~sqrt(n):
采用遍历的核心思想是看2~n中有无能被n整除的数,如果没有则n是素数,反之是合数.
而合数必然可以写为两个整数之积,其中一个小于sqrt(n),记为a,另一个大于sqrt(n),记为b,于是有:
因此如果n是合数,2~sqrt(n)之间必然存在它的因子,当出现能被n整除的数时,就可以断言这必然是合数.