首页 > 试题广场 >

小红的合数寻找

[编程题]小红的合数寻找
  • 热度指数:6152 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1024M,其他语言2048M
  • 算法知识视频讲解
\hspace{15pt}小红拿到了一个正整数 x,她希望你在 [x, 2 \times x] 区间内找到一个合数,你能帮帮她吗?

\hspace{15pt}一个数为合数,当且仅当这个数是大于 1 的整数,并且不是质数。

输入描述:
\hspace{15pt}在一行上输入一个正整数 x \left(1 \leqq x \leqq 100\right)


输出描述:
\hspace{15pt}如果范围内不存在符合条件的合数,则输出 -1。否则,输出一个正整数代表答案。
\hspace{15pt}如果存在多个解决方案,您可以输出任意一个,系统会自动判定是否正确。注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。
示例1

输入

1

输出

-1

说明

\hspace{15pt}在这个样例中,我们需要在 [1, 2] 区间内找到一个合数。根据定义,1 不是合数,2 是质数,所以范围内不存在合数。
示例2

输入

5

输出

8

说明

\hspace{15pt}在这个样例中,我们需要在 [5, 10] 区间内找到一个合数。根据定义,6,8,10 均是合数,所以输出任意一个均为正确答案。
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // Write your code here
    let res = -1;
    function isComposition(num) {
        if (num <= 1) return false;

        for (let i = 2; i <= Math.sqrt(num); i++) {
            if (num % i === 0) {
                return true;
            }
        }
        return false;
    }
    while ((line = await readline())) {
        let tokens = line.split(" ");
        let a = parseInt(tokens[0]);

        if (a === 1) {
            console.log(-1);
            return false;
        }
        let _a =a
        while (a <= _a*2) {

            let isCompo = isComposition(a);
                // console.log(isCompo,a);
           
            if (isCompo) {
                res = a;
                console.log(res);
                return false;
            }
            a++
        }
        console.log(res);
    }
})();

发表于 2025-06-05 17:13:24 回复(0)