6719. 【2020.06.12省選模擬】T2 Module

題目

這題是交互題……
oj現在不支持交互題……
所以直接在這講講題目大意吧。
有個分數xy\frac{x}{y},你可以詢問一個質數PP,可以得到xy\frac{x}{y}在模PP意義下的值。
最多可以詢問55次。
數字的範圍都在[1,1e9][1,1e9]
多組數據,數據最多10510^5組。


正解

只需要詢問兩個質數P1=1e9+7P_1=1e9+7P2=1e9+9P_2=1e9+9,通過中國剩餘定理可以求出xy\frac{x}{y}在模P1P2P_1P_2意義下的值。
這時候xy\frac{x}{y}是唯一確定的。

證明考慮如果有x1y1\frac{x_1}{y_1}x2y2\frac{x_2}{y_2}不相等但在模意義下相等,那麼x1y2x2y1(modP1P2)x_1y_2\equiv x_2y_1 \pmod {P_1P_2}
由於P1P2>1e18P_1P_2>1e18x1y2,x2y11e18x_1y_2,x_2y_1\leq1e18,所以如果它們模意義下相等,那麼它們實際上也相等。
矛盾。

現在寫成這樣:xy=a(modP)\frac{x}{y}=a \pmod P
化一下就是x=aykPx=ay-kP,兩邊除以PyPy就是xPy=aPky\frac{x}{Py}=\frac{a}{P}-\frac{k}{y}
x1e9x\leq 1e9的解只有一個,具體怎樣理解可以結合上面的性質。
由於PyPy太大(大於1e181e18)了,趨近於00。於是我們要做的就是找到ky\frac{k}{y},使其儘量逼近aP\frac{a}{P}

題解做法:
在Stern-Brocot Tree上二分。
直接一個一個走可能會時間超限。發現拐點有O(lg1e9)O(\lg 1e9)個,於是走的過程中可以二分它往某個方向最多走多少步。

此外還有隔壁的爆標算法,推一波類歐。
具體是解這樣的不等式:laxmod  prl \leq ax \mod p\leq r,類歐推一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章