CF679A Bear and Prime 100
题目描述
这是一道交互题。Bear Limak 想了一个隐藏的数字——一个在区间 $[2,100]$ 内的整数。你的任务是判断这个隐藏的数字是质数还是合数。
对于 $x>1$ 的整数,如果 $x$ 恰好有两个不同的约数($1$ 和 $x$ 本身),那么它是质数。如果 $x>1$ 不是质数,则称为合数。
你最多可以询问 $20$ 次关于隐藏数字的约数的问题。每次询问时,你应输出区间 $[2,100]$ 内的一个整数。如果你的整数是隐藏数字的约数,系统会回复 “yes”,否则回复 “no”。
例如,如果隐藏数字是 $14$,那么系统仅在你输出 $2$、$7$ 或 $14$ 时回复 “yes”。
当你完成询问后,应输出“prime”或“composite”并结束你的程序。
如果你询问次数超过 $20$ 次,或输出了不在 $[2,100]$ 范围内的整数,将获得 Wrong Answer 结果。如果你输出的答案不正确,也会获得 Wrong Answer 结果。
如果你没有输出任何内容(但应当输出时未输出),或者忘记刷新输出,将获得 Idleness Limit Exceeded 结果(详见下文)。
输入格式
在每次询问后,你都应从输入中读取一个字符串。如果你输出的整数是隐藏数字的约数,字符串为 "yes",否则为 "no"。
输出格式
你最多可以询问 $20$ 次——在一行内输出一个 $[2,100]$ 范围里的整数。你必须输出换行符并刷新输出。随后你应从输入中读取一个回复。
在任何时刻,你都可以输出 “prime” 或 “composite”(不含引号)。之后刷新输出并结束程序。
刷新输出的方法:
- 在 C++ 中使用 fflush(stdout);
- 在 Java 中使用 System.out.flush();
- 在 Python 中使用 stdout.flush();
- 在 Pascal 中使用 flush(output);
- 其它语言请参阅相关文档。
Hack 数据提示:要 Hack 他人,在输入中应输出隐藏数字——一个 $[2,100]$ 区间内的整数。当然,对方程序不能从输入中读取这个隐藏数字。
说明/提示
第一次测试中的隐藏数字为 $30$。下表给出了通信过程的更好形式。

隐藏数字能被 $2$ 和 $5$ 整除。因此它必然是合数。注意,不必准确知道隐藏数字的具体值。本例中的隐藏数字为 $30$。

$59$ 是隐藏数字的约数。在 $[2,100]$ 区间内,只有 $59$ 一个数含有这个约数。因此隐藏数字必然是 $59$,为质数。注意,实际上,在第二次询问后就已可确定结果,可以直接输出答案。虽然如此,未超出 $20$ 次限制下,多余的询问也是被允许的。
由 ChatGPT 5 翻译