• 模!


    同余方程组

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

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

  • 相关阅读:
    C++ 编译、调试错误总结
    git submodule 使用
    SGI STL双端队列deque
    前端监控系统备忘
    webpack原理系列
    Fiddler+proxifier解决抓取不到客户端接口的问题
    AutoFac中常用方法说明
    SQL查询表结构
    linux安装consul集群
    Sqlserver查看所有表数据行数,查找包含xxx字符串的SP
  • 原文地址:https://www.cnblogs.com/wangck/p/4587614.html
Copyright © 2020-2023  润新知