P10383

P10383 杂分选约

题意:

P10383 「HOI R1」杂分选约

把

\[\dfrac{\displaystyle\prod_{i=1}^n a_i}{\displaystyle\prod_{j=1}^m b_j} \]

表示为 \(\dfrac{p}{q}\),求 \(p\) 和 \(q\)。


另一种 EXGCD:

形式:

常见的 \(exgcd\) 是递归形式的,其中每一层都满足:

\[a'x+b'y=\gcd(a,b) \]

但其实 \(exgcd\) 还有另一种递推的形式,而且功能更加强大,其每一层 \(i\) 都满足:

\[A s_i+B t_i=r_i \]

注意:右边是当前余数 \(r_i\),不是恒等于 \(\gcd(A,B)\);只有最后一行 \(r_k=\gcd(A,B)\)。

递推:
  1. 初始状态:两行“种子”

迭代版 \(exgcd\) 一开始就摆出两行,它们显然满足 \(As+Bt=r\):

\[\begin{aligned} r_0 &= A, & s_0 &= 1, & t_0 &= 0, & A\cdot 1+B\cdot 0 &= A=r_0, \\ r_1 &= B, & s_1 &= 0, & t_1 &= 1, & A\cdot 0+B\cdot 1 &= B=r_1. \end{aligned} \]

这两行就是种子。之后每一步都用前两行推出下一行,就像斐波那契递推一样。

  1. 递推规则:商 \(k\)、余数 \(r\)、系数 \(s,t\) 同步推

欧几里得除法的商:

\[k_i=\left\lfloor\frac{r_{i-1}}{r_i}\right\rfloor,\qquad r_{i+1}=r_{i-1}-k_i r_i \]

  1. 系数用同样的 \(k_i\) 推:

\[s_{i+1}=s_{i-1}-k_i s_i,\qquad t_{i+1}=t_{i-1}-k_i t_i. \]

这样每一层的式子都能满足:

\[\begin{aligned} A s_{i+1}+B t_{i+1} &=A(s_{i-1}-k_i s_i)+B(t_{i-1}-k_i t_i)\\ &=(A s_{i-1}+B t_{i-1})-k_i(A s_i+B t_i)\\ &=r_{i-1}-k_i r_i=r_{i+1}. \end{aligned} \]

以 \(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\)。

\[r_2=100-2\cdot37=26,\quad s_2=1-2\cdot0=1,\quad t_2=0-2\cdot1=-2. \]

第 2 步:\(k_2=\lfloor37/26\rfloor=1\)。

\[r_3=37-1\cdot26=11,\quad s_3=0-1\cdot1=-1,\quad t_3=1-1\cdot(-2)=3. \]

第 3 步:\(k_3=\lfloor26/11\rfloor=2\)。

\[r_4=26-2\cdot11=4,\quad s_4=1-2\cdot(-1)=3,\quad t_4=-2-2\cdot3=-8. \]

第 4 步:\(k_4=\lfloor11/4\rfloor=2\)。

\[r_5=11-2\cdot4=3,\quad s_5=-1-2\cdot3=-7,\quad t_5=3-2\cdot(-8)=19. \]

第 5 步:\(k_5=\lfloor4/3\rfloor=1\)。

\[r_6=4-1\cdot3=1,\quad s_6=3-1\cdot(-7)=10,\quad t_6=-8-1\cdot19=-27. \]

第 6 步:\(k_6=\lfloor3/1\rfloor=3\)。

\[r_7=3-3\cdot1=0. \]

\(r_7=0\)。停止。上一行 \(r_6=1=\gcd(100,37)\),特解 \((s_6,t_6)=(10,-27)\)。

然后还会注意到 \(r\) 本质上一直在取模,所以严格递减。


P10383:

回到本题,取一个足够大的模数 \(M\),先求出取模后的结果。

记:

\[S1=\prod_{i=1}^n a_i \bmod M,\qquad S2=\prod_{j=1}^m b_j \bmod M, \]

并令

\[h=\frac{S1}{S2}\bmod M. \]

真实答案 \(\dfrac{p}{q}\) 满足

\[h\equiv \frac{p}{q}\pmod M, \]

即

\[p\equiv hq\pmod M. \]

写成整数等式就是

\[p=hq+Mt \]

或

\[p-hq=Mt, \]

其中 \(t\) 是某个整数(可正可负)。

对 \((M,h)\) 做递推版 \(exgcd\)。令 \(A=M,\ B=h\),则每一步满足

\[M s_i+h t_i=r_i, \]

所以

\[r_i\equiv h t_i\pmod M. \]

于是

\[\frac{r_i}{t_i}\equiv h\equiv\frac{p}{q}\pmod M. \]

链上每一项都是模意义下合法的“分数表示”,但只有那个分子分母都不超过 \(L\) 且互质的才是真实答案。

设 \(L\) 为答案上界,本题 \(p,q\le 3\times10^9\),取

\[L=3\times10^9. \]

为了确保正确性,需要模数满足

\[M>2L^2. \]

本题中

\[2L^2=2\times(3\times10^9)^2=1.8\times10^{19}, \]

因此可以取

\[M=2^{64}-59=18446744073709551557, \]

它是质数,且满足 \(M>2L^2\)。

这样可以证明以下两个引理。


1. 盒内解唯一(核心引理)

引理:若 \((a,b)\) 和 \((c,d)\) 都满足

\[a\equiv hb,\quad c\equiv hd\pmod M,\quad |a|,|b|,|c|,|d|\le L, \]

则 \((a,b)=\pm(c,d)\)。

证明:由同余消去 \(h\):

\[ad-bc\equiv0\pmod M. \]

但

\[|ad-bc|\le|ad|+|bc|\le L^2+L^2=2L^2<M, \]

所以 \(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}\) 同号,

\[|t_{i+1}|=|t_{i-1}-k_i t_i|=|t_{i-1}|+k_i|t_i|. \]

于是

\[|t_0|=0<|t_1|=1\le|t_2|<|t_3|<\cdots \]

从 \(i=2\) 起严格递增。


4. 为什么停在第一个 \(r_i\le L\) 就是答案

设 \(i_0\) 是第一个满足 \(r_{i_0}\le L\) 的位置,则

\[r_{i_0-1}>L. \]

先证明 \(|t_{i_0}|\le L\)。

反证,假设 \(|t_{i_0}|>L\)。真实答案 \((p,q)\) 是格

\[\Lambda=\{(x,y):x\equiv hy\pmod M\} \]

中的点,且 \(0<p,q\le L\)。格 \(\Lambda\) 的一组基是

\[(r_{i_0-1},t_{i_0-1}),\qquad (r_{i_0},t_{i_0}), \]

所以存在整数 \(a,b\) 使

\[(p,q)=a(r_{i_0-1},t_{i_0-1})+b(r_{i_0},t_{i_0}). \]

看第一坐标:

\[p=a r_{i_0-1}+b r_{i_0},\qquad 0<p\le L<r_{i_0-1}. \]

若 \(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|=|a t_{i_0-1}+b t_{i_0}| =a|t_{i_0-1}|+|b||t_{i_0}| \ge|t_{i_0}|>L, \]

与 \(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}|\le L,\qquad |t_{i_0}|\le L, \]

且 \(r_{i_0}\equiv h t_{i_0}\pmod M\),所以 \((r_{i_0},t_{i_0})\) 在盒内且满足模等价。由盒内唯一性引理,

\[(r_{i_0},t_{i_0})=\pm(p,q). \]

又 \(r_{i_0}>0,\ p>0\),所以

\[(r_{i_0},t_{i_0})=(p,q). \]

结论:算法停在第一个 \(r_i\le L\) 的位置,输出 \((r_i,|t_i|)\) 就是真实答案。


算法流程

  1. 取 \(M=2^{64}-59\),\(L=3\times10^9\)。
  2. 快读计算 \(S1,S2\),求 \(h=S1\cdot S2^{-1}\bmod M\)。
  3. 对 \((M,h)\) 做迭代 \(exgcd\),维护 \(r_0,r_1,s_0,s_1,t_0,t_1\)。
  4. 当 \(r_1>L\) 时继续递推;停下时输出 \((r_1,|t_1|)\)(符号调整使分母为正)。
posted @ 2026-10-26 12:04  wlhao  阅读(5)  评论(0)    收藏  举报