2026 Summer Day13
P1495 【模板】中国剩余定理(CRT)/ 曹冲养猪
板子题。
我们求解同余方程组
x≡ai(modmi)
且 mi 两两互质的情况下,用如下过程:
-
令 M=∏imi,
-
对于每一个 i,令 ti=miM。计算 ti 在模 mi 下的逆元 ti−1,
-
令 ci=titi−1,
-
方程组的解为 ∑iaici(modM)。
考虑正确性。由于 ti=miM,即 j=i,mj∣ti,则对于 j=i,都有 tj≡0(modni),所以 cj≡tj≡0(modni)。又因为 ci=titi−1,则 ci≡1(modni)。对于最终答案 x=∑iaici(modM):
x≡aici≡ai⋅ti(ti−1modni)≡ai(modni)
所以构造的 x 是满足所有同余方程的。
code
P4777 【模板】扩展中国剩余定理(exCRT)
板子题。
这道题不保证 mi 两两互质,就不能直接使用上述的构造方式。
我们考虑将每个相邻的同余方程合并。假设我们当前处理的方程为 x≡r1(modm1) 和 x≡r2(modm2),则 x 可以表示为 x=k1m1+r1=k2m2+r2,所以 k1m1−k2m2=r2−r1,这是裴蜀定理中 Ax+By=C 的形式,有解需要满足 gcd(m1,m2)∣(r2−r1) 的条件,这个条件也是同余方程组有解的条件。
考虑这个式子的一般形式 m1x−m2y=gcd(m1,m2),我们可以用 exGCD 求解一个特解 x0,y0,然后 x0×gcd(m1,m2)r2−r1→x0,y0×gcd(m1,m2)r2−r1→y0 这样我们就得到了方程 m1x−m2y=r2−r1 的一组解。通解形式为:
xy=x0+gcd(m1,m2)m2×k=y0+gcd(m1,m2)m1×k
再将通解形式带回 m1x+r1 中,得到:
x=m1×(x0+gcd(m1,m2)m2×k)+r1=m1×x0+lcm(m1,m2)×k+r1
所以 x≡m1×x0+r1(modlcm(m1,m2),这样就把两个同余方程合并了。
code
P3846 【模板】BSGS / [TJOI2007] 可爱的质数
还是板子题。
我们要求离散对数 x,满足 bx≡n(modp)。
我们将 x 分解为 i×p−j 的形式,则原来的方程可以写为
bi×p−jbi×p≡n≡n×bj(modp)(modp)
这样我们只需要预处理所有 j<p 的 n×bj 并存在一张哈希表里面,然后枚举 i 查表即可,复杂度 O(p)。
code
P3232 [HNOI2013 / JSOI2013] 游走
以这道题复习高斯消元。
如果我们令 fi 表示节点 i 被走过的期望次数,则:
fi={∑(u,v)∈E,v=ndeg(v)fv+1∑(u,v)∈E,v=ndeg(v)fvi=11<i<n
这显然是一个方程组,可以写成如下形式:
1deg(1)1⋮deg(1)1deg(2)11⋮deg(2)1deg(3)1deg(3)1⋮deg(3)1……⋱…deg(n−1)1deg(n−1)1⋮110⋮0
然后高斯消元后按照 fi 的值贪心选取编号即可。
code
Comments
Quiet notes for this article.