P10383
P10383 杂分选约
题意:
P10383 「HOI R1」杂分选约
把
表示为 \(\dfrac{p}{q}\),求 \(p\) 和 \(q\)。
另一种 EXGCD:
形式:
常见的 \(exgcd\) 是递归形式的,其中每一层都满足:
但其实 \(exgcd\) 还有另一种递推的形式,而且功能更加强大,其每一层 \(i\) 都满足:
注意:右边是当前余数 \(r_i\),不是恒等于 \(\gcd(A,B)\);只有最后一行 \(r_k=\gcd(A,B)\)。
递推:
- 初始状态:两行“种子”
迭代版 \(exgcd\) 一开始就摆出两行,它们显然满足 \(As+Bt=r\):
这两行就是种子。之后每一步都用前两行推出下一行,就像斐波那契递推一样。
- 递推规则:商 \(k\)、余数 \(r\)、系数 \(s,t\) 同步推
欧几里得除法的商:
- 系数用同样的 \(k_i\) 推:
这样每一层的式子都能满足:
以 \(A=100,B=37\) 为例:
种子:
| \(i\) | \(r_i\) | \(s_i\) | \(t_i\) |
|---|---|---|---|
| 0 | 100 | 1 | 0 |
| 1 | 37 | 0 | 1 |
第 1 步:\(k_1=\lfloor100/37\rfloor=2\)。
第 2 步:\(k_2=\lfloor37/26\rfloor=1\)。
第 3 步:\(k_3=\lfloor26/11\rfloor=2\)。
第 4 步:\(k_4=\lfloor11/4\rfloor=2\)。
第 5 步:\(k_5=\lfloor4/3\rfloor=1\)。
第 6 步:\(k_6=\lfloor3/1\rfloor=3\)。
\(r_7=0\)。停止。上一行 \(r_6=1=\gcd(100,37)\),特解 \((s_6,t_6)=(10,-27)\)。
然后还会注意到 \(r\) 本质上一直在取模,所以严格递减。
P10383:
回到本题,取一个足够大的模数 \(M\),先求出取模后的结果。
记:
并令
真实答案 \(\dfrac{p}{q}\) 满足
即
写成整数等式就是
或
其中 \(t\) 是某个整数(可正可负)。
对 \((M,h)\) 做递推版 \(exgcd\)。令 \(A=M,\ B=h\),则每一步满足
所以
于是
链上每一项都是模意义下合法的“分数表示”,但只有那个分子分母都不超过 \(L\) 且互质的才是真实答案。
设 \(L\) 为答案上界,本题 \(p,q\le 3\times10^9\),取
为了确保正确性,需要模数满足
本题中
因此可以取
它是质数,且满足 \(M>2L^2\)。
这样可以证明以下两个引理。
1. 盒内解唯一(核心引理)
引理:若 \((a,b)\) 和 \((c,d)\) 都满足
则 \((a,b)=\pm(c,d)\)。
证明:由同余消去 \(h\):
但
所以 \(ad-bc=0\),即 \(a/b=c/d\)。两组都互质,故 \((a,b)=\pm(c,d)\)。
含义:在 \([-L,L]^2\) 这个盒子里,满足模等价的“候选分数”至多一个(符号不论)。
2. 真实答案在盒内,且在链的“模等价解集”里
真实 \((p,q)\) 满足:
- \(p,q\le L\)(题目保证);
- \(p\equiv hq\pmod M\)(因为 \(h\equiv p/q\))。
所以 \((p,q)\) 是盒内满足模等价的一个解。由引理,它是唯一的(符号不论)。
3. \(|t_i|\) 递增
由递推和 \(t_0=0,\ t_1=1\) 可归纳:
- 符号交替:\(t_{i-1}\) 与 \(t_i\) 异号(\(i\ge2\)),所以 \(t_i=(-1)^{i-1}|t_i|\)。
- 绝对值递推:因为 \(-k_i t_i\) 与 \(t_{i-1}\) 同号,
于是
从 \(i=2\) 起严格递增。
4. 为什么停在第一个 \(r_i\le L\) 就是答案
设 \(i_0\) 是第一个满足 \(r_{i_0}\le L\) 的位置,则
先证明 \(|t_{i_0}|\le L\)。
反证,假设 \(|t_{i_0}|>L\)。真实答案 \((p,q)\) 是格
中的点,且 \(0<p,q\le L\)。格 \(\Lambda\) 的一组基是
所以存在整数 \(a,b\) 使
看第一坐标:
若 \(a\ge1\),则必须 \(b\le-1\)(否则 \(p\ge r_{i_0-1}>L\));若 \(a\le-1\),则必须 \(b\ge1\);若 \(a=0\),则 \(p=br_{i_0}\),需 \(b\ge1\)。
在 \(a\ge1,b\le-1\) 时(另一种对称),\(t_{i_0-1}\) 与 \(t_{i_0}\) 异号,所以 \(a t_{i_0-1}\) 与 \(b t_{i_0}\) 同号,于是
与 \(q\le L\) 矛盾。\(a\le-1,b\ge1\) 同理。\(a=0\) 时 \(|q|=|b||t_{i_0}|\ge|t_{i_0}|>L\),同样矛盾。
所以 \(|t_{i_0}|\le L\)。
现在
且 \(r_{i_0}\equiv h t_{i_0}\pmod M\),所以 \((r_{i_0},t_{i_0})\) 在盒内且满足模等价。由盒内唯一性引理,
又 \(r_{i_0}>0,\ p>0\),所以
结论:算法停在第一个 \(r_i\le L\) 的位置,输出 \((r_i,|t_i|)\) 就是真实答案。
算法流程
- 取 \(M=2^{64}-59\),\(L=3\times10^9\)。
- 快读计算 \(S1,S2\),求 \(h=S1\cdot S2^{-1}\bmod M\)。
- 对 \((M,h)\) 做迭代 \(exgcd\),维护 \(r_0,r_1,s_0,s_1,t_0,t_1\)。
- 当 \(r_1>L\) 时继续递推;停下时输出 \((r_1,|t_1|)\)(符号调整使分母为正)。

浙公网安备 33010602011771号