1 源码:
public class Test {
public static void main(String[] args) {
// 验证任何大于2的偶数都可以表示为两个素数之和
System.out.println("请输入一个大于2的偶数:");
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
while (num <= 2 || num % 2 == 1) {
System.out.println("输入错误请重新输入:");
scanner = new Scanner(System.in);
num = scanner.nextInt();
}
for (int i = 2; i <= num - i; i++) {
if (isPrimeNum(i) && isPrimeNum(num - i)) {
System.out.println(num + "=" + i + "+" + (num - i));
}
}
// 验证任何大于5的奇数都可以表示为三个素数之和
System.out.println("请输入一个大于5的奇数:");
scanner = new Scanner(System.in);
num = scanner.nextInt();
while (num <= 5 || num % 2 == 0) {
System.out.println("输入错误请重新输入:");
scanner = new Scanner(System.in);
num = scanner.nextInt();
}
for (int i = 2; i <= num - i; i++) {
for (int j = 2; j <= num - i - j; j++) {
// 去重
if (j >= i) {
if (isPrimeNum(i) && isPrimeNum(j) && isPrimeNum(num - i - j)) {
System.out.println(num + "=" + i + "+" + j + "+" + (num - i - j));
}
}
}
}
}
/**
* 判断一个数是否为素数(质数)
*/
public static boolean isPrimeNum(int num) {
for (int i = 2; i <= (int) Math.sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
}
2 细节问题分析
java判断一个数是否为素数,为什么用Math中的sqrt函数?
答:素数又称质数。指在一个大于1的自然数中,除了1和此整数自身之外,没法被其他自然数整除的数。合数是指自然数中除能被1和本整数整除外,还能被其他的整数整除的数。比1大的整数不是素数就是合数。
如果一个数不是素数是合数,那么一定可以由两个自然数相乘得到,其中一个大于或等于它的平方根,一个小于或等于它的平方根。