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

https://www.nowcoder.com/practice/f8538f9ae3f1484fb137789dec6eedb9 (opens new window)

# 描述

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

输入描述:

输入一个大于2的偶数

输出描述:

从小到大输出两个素数

示例1

输入:
20

输出:
7
13

示例2

输入:
4

输出:
2
2

# 解答

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
    let line;
    let num;
    while(line = await readline()){
        num = parseInt(line);
    }

    let minNum1;
    let minNum2;
    let min = num;

    for (let i = 2, len = num / 2; i <= len; i++) {
        const num1 = i;
        const num2 = num - i;

        if (!(isPrime(num1) && isPrime(num2))) {
            continue;
        }

        const delta = num2 - num1;

        if (delta < min) {
            min = delta;
            minNum1 = num1;
            minNum2 = num2;
        }
    }

    console.log(minNum1);
    console.log(minNum2);
}();

function isPrime(num) {
    // 1
    if (num <= 1) { 
        return false;
    }

    // 2 、3
    if (num <= 3) {
        return true;
    }

    // 2、3  不进循环
    for (let i = 2, len = Math.sqrt(num); i <= len; i++) {
        if (num % i === 0) {
            return false;
        }
    }

    return true;
}
本章目录