算法刷题-查找组成一个偶数最接近的两个素数-JAVA

0x00 引言

为获取一个良好的算法思维,以及不再成为一个脚本小子,争取每天一道算法题,培养自己的逻辑思维,温顾各类型语言语法知识。

题解只写自己理解的解法,其他解法不再增加。题目与解析均在代码里面。

0x01 难度等级

简单

0x02 代码

package 简单;
/*
*
* 任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对。

数据范围:输入的数据满足 4 \le n \le 1000 \4≤n≤1000
输入描述:
输入一个大于2的偶数

输出描述:
从小到大输出两个素数
*
*
*
* */

import java.util.Scanner;

/*
* 要求一,是素数
* 要求二,差最小

*示例1
输入:
20

输出:
7
13
* */
public class 查找组成一个偶数最接近的两个素数 {
    public static void main(String[] args) {

        //寻找差值最小,要找两个素数相加等于num
        Scanner sc=new Scanner(System.in);
        int x=sc.nextInt();
        int m=x;
        int a=0;
        int b=0;
        for (int i = 0; i <=x; i++) {
//            if(m+n==x)
            for (int j = 0; j <=i; j++) {
                if(isSUshu(i)&&isSUshu(j)&&(i+j)==x){
//                    System.out.println(j-i);//用一个参数去接收j-i
//                    m=j-i;
                    if(m>Math.abs(j-i)){
                        m=Math.abs(j-i);//如果j-i的绝对值小于最初的x,就把该值赋给m
                        a=i;
                        b=j;
                    }
                }
            }
        }
//        System.out.println(m);

        System.out.println(b);
        System.out.println(a);



    }

    //判断该数是否为素数
    public static boolean isSUshu(int num){

        for (int i = 2; i < num; i++) {
            if(num%i==0){
                return false;
            }
        }
        return true;
    }
}

0x03 算法思想

(1)理解题目的含义,需要满足的条件是输入一个比2大的素数

(2)素数的含义,素数,指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数(不包括0)整除的数

(3)函数的思想,写一个函数作为判断,对每一个求和的i与j都进行判断

(4)数学类的工具包里绝对值的使用:

m=Math.abs(j-i);

0x04 运行结果

posted @ 2023-02-28 21:49  铺哩  阅读(27)  评论(0编辑  收藏  举报