zoukankan      html  css  js  c++  java
  • 模!

    同余方程组

    如何解一个同余方程组:$$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

    用了上面的神奇定理(模下的幂)就简单了。

  • 相关阅读:
    CodeForces 660D Number of Parallelograms
    【POJ 1082】 Calendar Game
    【POJ 2352】 Stars
    【POJ 2481】 Cows
    【POJ 1733】 Parity Game
    【NOI 2002】 银河英雄传说
    【NOI 2015】 程序自动分析
    【POJ 1704】 Georgia and Bob
    【HDU 2176】 取(m堆)石子游戏
    【SDOI 2016】 排列计数
  • 原文地址:https://www.cnblogs.com/wangck/p/4587614.html
Copyright © 2011-2022 走看看