同余方程组
如何解一个同余方程组:$$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) mid 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)当作取模数计算一次答案,然后合并出最后的答案。
也就是,我们要解同余方程组:$$xequiv 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
用了上面的神奇定理(模下的幂)就简单了。