题解 | #查找组成一个偶数最接近的两个素数#

查找组成一个偶数最接近的两个素数

https://www.nowcoder.com/practice/f8538f9ae3f1484fb137789dec6eedb9

思路:将能组成这个数的两个素数存放在一个数组 arr 中,注意是一对一对的存放,并且前一个较小。

遍历 arr 数组中的每一对元素,计算它们的差值。如果当前的差值小于上一次计算的差值,那么替换差值,并重复这个过程。

直到找到差值最小的两个元素,记录至两个变量中,输出即可。


import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int n = in.nextInt();
            int res = Integer.MAX_VALUE;  //记录差值
            int num1 = 0,num2 = 0;  //记录输出结果的两个质数
            int arr[] = new int[n+1];  //长度为 n+1 的原因是特例当 n == 4的时候。
            int index = 0;
            for(int i=1;i<=n/2;i++){  //遍历一半即可
                if(isSu(i) && isSu(n-i)){
                    arr[index++] = i;
                    arr[index++] = n-i;
                }
            }
            for(int i=0;i<n-1 && arr[i]!=0;i+=2){
                if(arr[i+1]-arr[i] < res){  //如果当前差值小于上一次的差值
                    num1 = arr[i];  //记录两个变量
                    num2 = arr[i+1];
                    res = arr[i+1]-arr[i];  //更新差值
                }
            }
            System.out.println(num1);
            System.out.println(num2);
        }
    }

    //判断一个数是否为素数
    public static boolean isSu(int num){
        if(num==1 || num==2) return true;
        for(int i = 2;i<num;i++){
            if(num % i == 0) return false;
        }
        return true;
    }
}
全部评论

相关推荐

Natrium_:这时间我以为飞机票
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务