小 G 喜欢造红石铁砧陷阱坑杀队友,但是小 G 更喜欢质数。于是他用红石搓了一个 AI 出来和他玩,小 G 现在把他拿出来摆摊,一个绿宝石玩一次,输了的话什么都没有,赢了的话会获得两个绿宝石。CW 现在想要坑小 G 一笔,于是他找到了你。
这是一道交互题
这个 AI 名为 Garry。
他会在心里想一个整数 n,保证 2\leq n\leq100,想要让你猜这个数是质数还是合数。
他允许你在每局游戏中向他提至多 m 个询问。对于每一个询问,你需要向标准输出打印一行 1 x
,表示询问 x 是否是 n 的约数。你需要保证 2\leq x\leq100。随后在标准输入中读入一个数。如果 x 是 n 的约数则读入的数为 1,否则为 0。
如果你已经猜出了答案,则需要向标准输出打印一行 2 Prime
或 2 Composite
,表示 n 为质数或 n 为合数。
由于他总共想要和你玩 q 次游戏,所以你需要判断 q 个数是否为质数。
如果你不知道质数是什么,请看这里:质数
第一行读入两个数 q,m,表示小 G 和你玩游戏的次数和每局最多的询问次数。
接下来若干行,见【题目描述】。
若干行,见【题目描述】。
请注意,你需要在每次输出之后输出一个换行符,并且刷新缓存区。
下面是部分语言刷新缓存区的方法:
fflush(stdout)
stdout.flush()
System.out.flush()
flush(output)
特别的,对于 C++ 语言,在输出换行时如果你使用 std::endl
而不是 '\n'
,也可以自动刷新缓冲区。
2 20 0 1 1 0 1 0 0 0
1 2 1 5 1 17 2 Composite 1 58 1 59 1 78 1 78 1 2 2 Prime
注:样例仅供理解交互过程,可能不符合逻辑。
【样例解释】
对于第一组样例:
n= | 85 |
---|---|
x=2 | 2\nmid85 |
x=5 | 5\mid85 |
x=17 | 17\mid85 |
由于 n 可同时被 5 和 17 整除,所以 n 是合数。
对于第二组样例:
n= | 59 |
---|---|
x=58 | 58\nmid59 |
x=59 | 59\mid59 |
x=78 | 78\nmid59 |
x=78 | 78\nmid59 |
x=2 | 2\nmid59 |
在 [2,100] 的范围以内只有 59 可以整除 59,59 为质数。
【数据范围】
对于 10\% 的数据,有 m=99。
对于另外 20\% 的数据,有 m=30。
对于 100\% 的数据,有 20\leq m\leq99,\ 1\leq q\leq10。