luogu#P16409. [Algo Beat Contest 004 E] Elusive Prime

    ID: 16211 远端评测题 1000ms 512MiB 尝试: 0 已通过: 0 难度: 7 上传者: 标签>数学交互题Special JudgeO2优化素数判断,质数,筛法随机化Ad-hoc

[Algo Beat Contest 004 E] Elusive Prime

背景

289caf553d8724a64acbc801aefdb6c8.png

题目描述

这是一道交互题。

你需要猜测一个隐藏的素数 pp。每次你可以询问一个整数 aa,系统将返回勒让德符号 (ap)\left(\frac{a}{p}\right) 的值,定义如下:

  • 如果 pap \mid a,返回 00
  • 否则,如果存在整数 xx 使得 x2a(modp)x^2 \equiv a \pmod{p},返回 11
  • 否则,返回 1-1

勒让德符号是数论中的基本工具,它满足欧拉准则:

$$\left(\frac{a}{p}\right) \equiv a^{\frac{p-1}{2}} \pmod{p}$$

交互方式

你的程序需要通过标准输入输出与评测系统交互。首先,程序应开始询问,每次询问格式为:

? a

其中 aa 是一个整数,满足 1a1061 \le a \le 10^6。每次询问后,评测系统会返回一个整数(00111-1),你的程序应从标准输入读取该返回值。

当你确定 pp 后,应输出答案,格式为:

! p

其中 pp 是你猜测的素数。输出答案后,你的程序应立即结束。

你最多可以进行 不超过 1717 次询问。如果询问次数超过限制,或者答案错误,或者格式不符合要求,评测系统将判定为错误答案。

注意:每次输出后必须刷新缓冲区,例如 C++ 中使用 cout << endlfflush(stdout),Python 中使用 print(..., flush=True)

你可以忽略交互库的运行时间。


1

-1

0

1
? 2

? 3

? 7

? 1

! 7

提示

【样例解释 #1】

样例中隐藏的素数为 p=7p=7。解释:

  • 询问 a=2a=2,返回 11,因为 322(mod7)3^2\equiv 2\pmod{7}
  • 询问 a=3a=3,返回 1-1,因为 33 不是模 77 的二次剩余。
  • 询问 a=7a=7,返回 00,因为 77pp 整除。
  • 询问 a=1a=1,返回 11,因为 11 总是二次剩余。
  • 最后输出答案 77

【数据范围】

  • 3p1063 \le p \le 10^6pp 为素数。