算法刷题-查找组成一个偶数最接近的两个素数-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);