Java基础算法题(44):一个偶数总能表示为两个素数之和。

查看所有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;
    }
}
发布了54 篇原创文章 · 获赞 1 · 访问量 2283

猜你喜欢

转载自blog.csdn.net/weixin_44803446/article/details/105377346