题目
这题是交互题……
oj现在不支持交互题……
所以直接在这讲讲题目大意吧。
有个分数yx,你可以询问一个质数P,可以得到yx在模P意义下的值。
最多可以询问5次。
数字的范围都在[1,1e9]
多组数据,数据最多105组。
正解
只需要询问两个质数P1=1e9+7和P2=1e9+9,通过中国剩余定理可以求出yx在模P1P2意义下的值。
这时候yx是唯一确定的。
证明考虑如果有y1x1和y2x2不相等但在模意义下相等,那么x1y2≡x2y1(modP1P2)
由于P1P2>1e18,x1y2,x2y1≤1e18,所以如果它们模意义下相等,那么它们实际上也相等。
矛盾。
现在写成这样:yx=a(modP)
化一下就是x=ay−kP,两边除以Py就是Pyx=Pa−yk
x≤1e9的解只有一个,具体怎样理解可以结合上面的性质。
由于Py太大(大于1e18)了,趋近于0。于是我们要做的就是找到yk,使其尽量逼近Pa。
题解做法:
在Stern-Brocot Tree上二分。
直接一个一个走可能会时间超限。发现拐点有O(lg1e9)个,于是走的过程中可以二分它往某个方向最多走多少步。
此外还有隔壁的爆标算法,推一波类欧。
具体是解这样的不等式:l≤axmodp≤r,类欧推一下。