同余方程组
如何解一个同余方程组:\[a_i x \equiv b_i (\mod m_i)\]
首先我们可以知道,解一定是这样的一个形式:\[x \equiv b(\mod m)\]
初始,我们可以令\(b=0, m=1\)表示所有整数。
现在的问题转化为求解这样两个方程:
\[x \equiv c (\mod m)\]
\[a x \equiv b(\mod m_i)\]
令\(x=pm + c\),则有\(a p m + q m_i=b + ca\),如果\((a m, m_i) \nmid b + ca\)无解,否则用扩展欧几里德解出\(p,q\),进而得到\[x \equiv pm + c (\mod \frac {m_im} {(m_i, am)})\]
中国剩余定理
一些计数类题目的取模有可能不是质数,然后有一些神奇的性质用不了。
这时我们可以把模数\(m\)拆开为\[\prod {p_i}^k\],其中\(P_i\)是质数。根据中国剩余定理的神奇性质,我们可以对每个 \({P_i}^k\)当作取模数计算一次答案,然后合并出最后的答案。
也就是,我们要解同余方程组:\[x\equiv b_i(\mod m_i)\],这里所有\(m_i\)两两互素。
令\(M = \prod m_i,M_i = {M \over m_i}\),那么\((m_i,M_i)=1\),所以,我们可以解\[M_ip_i+m_iq_i=1\],这时候,有个关键的事实:\[M_ip_i=1(\mod m_j) \iff j=i\],这样的话,答案就是:\[\sum b_iM_ip_i\]
模意义下的幂
一个神奇定理,证明传送门。
\[a^b \equiv a ^{b \mod \phi(m) + \phi(m)} (\mod m),b>\phi(m)\]
做过的一些题目
POJ 1150 The Last Non-zero Digit
把\(2,5\)的因子抽出来,然后使用分治的手段统计数字模\(10\)后等于\(3,7,9\)的各个数量。
POJ 1284 Primitive Roots
求原根数量,好像有这样一个公式?\[\phi(\phi(m))\]
现在水平有限,不会证 。
POJ 2115 C Looooops
裸的扩展欧几里德。
POJ Recurrent Function
裸的同余方程组。
POJ 2720 Last Digits
用了上面的神奇定理(模下的幂)就简单了。