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$。下表给出了通信过程的更好形式。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF679A/b5d048578748c4adde3d49c36a749660a61701b4.png) 隐藏数字能被 $2$ 和 $5$ 整除。因此它必然是合数。注意,不必准确知道隐藏数字的具体值。本例中的隐藏数字为 $30$。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF679A/f54f8d5adb5e9403a147185e0d841ee7fbfd7d7b.png) $59$ 是隐藏数字的约数。在 $[2,100]$ 区间内,只有 $59$ 一个数含有这个约数。因此隐藏数字必然是 $59$,为质数。注意,实际上,在第二次询问后就已可确定结果,可以直接输出答案。虽然如此,未超出 $20$ 次限制下,多余的询问也是被允许的。 由 ChatGPT 5 翻译