四次询问可以做 $2^{457}$,五次可以做 $2^{825627}$。
如果同时知道 $x\bmod y$ 的值和 $\lfloor x/(y-1)\rfloor$ 的值,就可以唯一确定 $x$。这是因为 $k(y-1),k(y-1)+1,\cdots,k(y-1)+y-2$ 这 $y-1$ 个数 $\bmod y$ 两两不同。
进一步考虑,如果知道了 $x\bmod y$,可以询问 $y-1$。如果知道了 $\lfloor x/(y-1)\rfloor$,按照上述考虑可以猜出 $x$;否则由于 $(y,y-1)=1$,可以 CRT 出 $x\bmod (y^2-y)$。如果事先知道了 $\lfloor x/(y^2-y-1)\rfloor$,此时就可以求出 $x$ 的值。
因此,同时知道 $x\bmod y$ 和 $\lfloor x/(y^2-y-1)\rfloor$,只需要一次询问就确定 $x$。
继续增加询问次数,当我们知道 $x\bmod y$,可以询问 $y^2-y-1$。
- 如果获得 $\lfloor x/(y^2-y-1)\rfloor$,递归到一步解决问题的 case。
- 否则获得 $x\bmod (y^2-y-1)$,根据 $(y,y^2-y-1)=(y,-1)=1$,可以 CRT 出 $x\bmod (y^3-y^2-y)$。此时如果事先知道了 $(y^3-y^2-y)^2-(y^3-y^2-y)-1$,又递归到了一个关于 $y^3-y^2-y$ 的一步解决 case。故若知道 $x\bmod y$ 和 $\lfloor x/((y^3-y^2-y)^2-(y^3-y^2-y)-1)\rfloor$,可以花费两步询问确定 $x$。
一般地,记知道 $x\bmod y_1$ 和 $\lfloor x/y_2\rfloor$ 是状态 $(y_1,y_2)$,那么在 $(y_1,y_3)$ 可以询问 $y_2$,分别递归到 $(y_1,y_2)$ 和 $(y_1y_2,y_3)$。若 $y_2=f(y_1)$,则 $y_3=f(y_1f(y_1))$。 CRT 要求 $y_1$ 和 $f(y_1)$ 互质。
可以写出如下函数列:
$$f_k(y)=\begin{cases} y-1 & k=0\\ f_{k-1}(yf_{k-1}(y)) & k>0\end{cases}$$
若事先已知 $x\bmod y$ 和 $\lfloor x/f_k(y)\rfloor$ 可以花费 $k$ 次询问确定 $x$ 的值。当 $f_k(y)$ 充分大时,后者总是 $0$。
$\gcd(f_0(y),y)=1$。
若 $\gcd(f_k-1(t),t)=1$,$\gcd(f_k(y),y)\le\gcd(f_{k-1}({\color{orange}{yf_{k-1}(y)}}),{\color{orange}{yf_{k-1}(y)}})=1$,自然 $\gcd(f_{k}(y),y)=1$。
于是归纳地证明了 CRT 总是可以跑满的 。
这部分讲一个很蠢但是足以应对原题的办法。考虑到 __int128 存储能力十分有限,实现的是这一做法。
当 $k=3$ 时,$f_k(6)=34704695273844026809552342149101>2^{104}$,总有 $\lfloor x/f_k(y)\rfloor=0$,只要第一次询问 $6$,就可以在获知 $x\bmod 6$ 的情况下三步解决问题。
如果得到了 $\lfloor x/6\rfloor$,讨论其大于等于 $1$ 和小于 $1$ 两种情况。
若大于等于 $1$,如 $6,7,8,9,10,11$,每次询问序列中位数(长度为偶数偏大选取,例如此时选取 $9$),如果是 $\bmod$ 由于序列充分大,对于两个序列中的元素 $x_1>x_2$,总有 $x_1\bmod x_2=x_1-x_2$(这是因为 $x_1-x_2\le 5$),可以直接确定答案;否则是 $/$,若商 $=1$,保留 $\ge$ 中位数的半部分;否则保留剩余半部分。一定可以在三次之内完成二分。
若小于 $1$,先选 $2$,无论得到了 $\lfloor x/2\rfloor$ 还是 $x\bmod 2$,都一定剩余不超过三个数合法,用上述方法每次询问剩余最大值判断是否是最大值即可。(若是,则除以最大值商是 $1$ 或余数是 $0$,否则不是)
接下来讲一个有道理多的做法。
如果知道了 $\lfloor x/4\rfloor$,可以按照类似上面的做法分类讨论,两次求出 $x$。(商为正就二分,为零就每次校验最大值)
$f_2(4)=1891$,于是第一次询问 $1891$。
- 如果知道了商,询问 $4$。
- 如果知道了余数,由于 $f_2(4)=1891$,可以在两次询问内求出 $x$。
- 如果知道了商,可以使用上述分讨。
- 如果知道了余数,并且 $x< f_3(1891)$,总有 $\lfloor x/f_3(1891)\rfloor=0$,可以在三次询问内求出 $x$。
于是 $4$ 次询问可以唯一确定一个小于 $f_3(1891)$ 的数(不知道能不能等于,感觉可以)。
$f_3(1891)=415227450555796293146383291752971533859282507656109175383886974071032638222595493173269375507830453856010225014151559968406603964178128401$,这略大于 $2^{457}$ 或 $4.15\times 10^{137}$,远超出原题要求。
暂不清楚是否存在更好的做法。
对于此做法,确定一个不超过 $V$ 的数需要的询问次数大约是 $\log\log\log V$。这是由于 $f_k(x)$ 中 $x$ 的指数每嵌套一层就要平方一次,其关于 $k$ 是双指数增长,所以 $f_k(x)$ 关于 $k$ 是三指数增长。
$k$ 次询问可以确定的确切值域是 $f_k(f_{k-1}(\cdots f_4(f_3(4))))$。
这样的多层嵌套基于三指数会给 $k$ 带来约 $1$ 的常数变化而不会改变三指数的本质。