首页 > 试题广场 >

小红的合数寻找

[编程题]小红的合数寻找
  • 热度指数: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 均是合数,所以输出任意一个均为正确答案。
入门题,判断是否有非质数,判断x是否为质数判断x % i是否为0,为0则不是质数 。(i从2到i <= 2 / x)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int x = in.nextInt();
            int res = -1;
            if (x == 1) {
                System.out.println(-1);
            } else {
                for (int i = x; i <= 2 * x; i++) {
                    if (isValid(i)) {
                        res = i;
                        break;
                    }
                }
                System.out.println(res);
            }
        }
    }
    private static boolean isValid(int x) {
        for (int i = 2; i <= x / 2; i++) {
            if (x % i == 0) {
                return true;
            }
        }
        return false;
    }
}

发表于 2025-07-19 21:02:32 回复(0)