查看所有50道基础算法题请看:
Java的50道基础算法题
package Demo44An_Odd;
import java.util.InputMismatchException;
import java.util.Scanner;
/**
* 一个偶数总能表示为两个素数之和。
*/
/*
分析:这道题包含两部分,一个是要确定一个数是偶数,另一个是确定一个数是素数
我是这样想的,对于给定的一个数,先找2到该数(n)之间的素数,找到一个后,再求n-该素数得另外一个数,如果得到的差也是个素数,那么
这两个数就符合题目条件,输出结果。
对于判断一个数是否是素数,代码重复率较高,可以将其抽取为一个方法。
*/
public class An_Odd {
public static void main(String[] args) {
// 获取用户输入的数字
Scanner sc = new Scanner(System.in);
int bottle;
boolean index = false;
while(true) {
try {
System.out.println("请您输入一个偶数: ");
int odd = sc.nextInt();
// 判断该用户输入的数字是否为偶数,不是偶数的话让用户重新输入
if (odd % 2 == 0) {
// 遍历寻找第一个素数
for (int i = 2; i < odd; i++) {
// 如果第一个素数找到了,那么第二个素数就是该数减去该素数
if (isPrimer(i)) {
bottle = odd - i;
// 如果该数减去该素数得到的差也是素数,那么该减数和差就符合题目条件,输出结果
// 但是我想输出所有可能的相加结果(这步可以没有,只输出一个即可),把break拿上来即可
if (isPrimer(bottle)) {
if (index) {
System.out.println(odd + "=" + i + "+" + bottle);
} else {
System.out.println("该数可以表示为两个素数之和。");
System.out.println(odd + "=" + i + "+" + bottle);
index = true;
}
}
}
}
break;
} else {
System.out.println("您输入的不是偶数,请输入一个偶数。");
}
// 抓一下用户可能输入的不是整数或者直接输入其它字符的情况
// 但是搞不明白为什么如果不break的话为啥就成死循环了,此问题留待以后解决,有懂的大佬麻烦评论区说一下。
}catch (InputMismatchException e){
System.out.println("您输入的数字有误,请输入一个偶数,偶数,知道是啥不?");
break;
}
}
}
/**
* 传入一个int类型的参数,判断该数是否是素数
* @param num
* @return
*/
public static boolean isPrimer(int num){
boolean flag = true;
for (int i = 2; i < num; i++) {
if(num % i == 0){
return false;
}
}
return flag;
}
}