CF1406E Deleting Numbers

题目描述

这是一个交互题。 有一个未知整数 $x$($1 \le x \le n$)。你需要找出 $x$ 的值。 一开始,你有一个整数集合 $\{1, 2, \ldots, n\}$。你最多可以进行 $10000$ 次如下操作: - A $a$:查询当前集合中有多少个数是 $a$ 的倍数。 - B $a$:查询当前集合中有多少个数是 $a$ 的倍数,然后删除所有 $a$ 的倍数,但 $x$ 永远不会被删除(即使 $x$ 也是 $a$ 的倍数)。在此操作中,$a$ 必须大于 $1$。 - C $a$:表示你已经确定 $x=a$。此操作只能执行一次。 请注意,执行 B 操作时必须满足 $a>1$。 请编写程序找出 $x$ 的值。

输入格式

第一行包含一个整数 $n$($1 \le n \le 10^5$)。剩余部分将在交互过程中给出。

输出格式

每一轮,你的程序需要输出一行,包含一个大写字母 A、B 或 C 和一个整数 $a$(A、C 操作时 $1 \le a \le n$,B 操作时 $2 \le a \le n$)。这一行描述你要进行的操作。 如果你的操作类型为 C,程序应立即终止。 否则,你的程序应读取一行,包含一个整数,表示你操作的答案。 每次输出后,不要忘记刷新输出缓冲区。具体方法如下: - C/C++ 使用 fflush(stdout); - Java 使用 System.out.flush(); - Python 使用 sys.stdout.flush(); - Pascal 使用 flush(output); - 其他语言请查阅相关文档。 保证 $x$ 在交互过程中是固定不变的。 Hack 格式: 要进行 Hack,请使用如下输入格式: 唯一一行包含两个整数 $n$ 和 $x$($1 \leq x \leq n \leq 10^5$)。

说明/提示

请注意,为了让样例更清晰,我们在样例中添加了额外的空行。你在交互过程中不应输出任何额外的空行。 在第一个测试中,$n=10$,$x=4$。 初始集合为:$\{1,2,3,4,5,6,7,8,9,10\}$。 第一次操作,你询问集合中有多少个数是 $4$ 的倍数并删除它们。答案是 $2$,因为有两个数是 $4$ 的倍数:$\{4,8\}$。$8$ 会被删除,但 $4$ 不会被删除,因为 $x$ 永远不会被删除。此时集合为 $\{1,2,3,4,5,6,7,9,10\}$。 第二次操作,你询问集合中有多少个数是 $2$ 的倍数。答案是 $4$,因为有四个数是 $2$ 的倍数:$\{2,4,6,10\}$。 第三次操作,你询问集合中有多少个数是 $8$ 的倍数。答案是 $0$,因为当前集合中没有任何数是 $8$ 的倍数。 第四次操作,你确定 $x=4$,这是正确答案。 由 ChatGPT 4.1 翻译