import java.util.Scanner;
public class PrimeNumber {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数:");
int num = scanner.nextInt(); //输入的待判断的数字
if(isPrime(num))
System.out.println("数字 " + num + " 是素数");
else
System.out.println("数字 " + num + " 不是素数");
}
/**
* 判断一个数是否是素数
* 算法核心:
* 定理: 如果n不是素数, 则n有一个因子d满足1< d<=sqrt(n)
* 证明: 如果n不是素数, 则由定义:n有一个因子d满足1< d< n。 如果d大于sqrt(n), 则n/d是满足1< n/d<=sqrt(n)的一个因子
*
* 由此可知:1. 小于等于2的不是素数 2. 2的倍数的数也不是素数 3. 如果从小到大开始遍历,一直到sqrt(n)还不能找到一个因子d,
* 则可以说明该数是素数
*
* @param num 待判断的数
* @return 判断结果
* */
private static boolean isPrime(int num) {
if(num <= 2 || num % 2 == 0)
return false;
for(int i = 3;i * i <= num;i += 2){
if(num % i == 0)
return false;
}
return true;
}
}
详细的解释已经写在上面的代码的注释中了,当然这种算法不算最优,但是比较简单易理解。当然更优的方案可以采用“筛选法”,具体的可以自行百度