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

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

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

import java.util.Scanner;

/**
 * @author sqwangdc
 * @date 2024/6/16
 * @Description HJ60 查找组成一个偶数最接近的两个素数
 * 穷举:
 * 从给定数的中间开始向两边枚举,mid=n/2,先判断mid本身是不是素数,如果是就直接输出mid, n-mid,例如:34,
 * 如果mid本身不是素数,则mid不断+1再尝试(此时,如果mid+1是素数,还需要判断n-mid是否是素数,不能直接输出mid,n-mid),直到找到 mid以及n-mid都为素数的情况,然后输出,这样可以保证两数的差距最小
 */
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        int n = input.nextInt();

        findSum(n);
    }

    private static void findSum(int n) {

        int mid = n / 2;
        // 1.先判断mid是不是素数,如果是,输出 mid、 mid
        // 调用判断素数函数
        boolean primeNumber = isPrimeNumber(mid);
        if (primeNumber) {
            System.out.println(mid);
            System.out.println(mid);
            return;
        }

        // 2.如果 mid不是素数,mid+1,再判断是不是素数,如果是,输出 mid+1,n-(mid+1),如果不是,mid再+1,然后再判断是不是素数...
        // (一个偶数最多+3就会变成素数)
        for (int i = 1; i < n / 2; i++) {
            mid = mid + 1;
            boolean primeNumber1 = isPrimeNumber(mid);
            boolean primeNumber2 = isPrimeNumber(n - mid);
            if (primeNumber1 && primeNumber2) {
                System.out.println(n - mid);
                System.out.println(mid);
                return;
            }
        }
    }


    private static boolean isPrimeNumber(int mid) {

        if (mid == 1 || mid == 2 || mid == 3) {
            return true;
        }

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

全部评论

相关推荐

出自剑来:找工作就是运气大于实力的事 我们组的应届生也是上周在牛客招聘被百度的捞了,一周速通下of
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务