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;
    }
}
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凉拌糖醋鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值