zoukankan      html  css  js  c++  java
  • 浅谈同余方程的求解与中国剩余定理

    浅谈同余方程的求解与中国剩余定理

    本篇随笔简单讲解一下信息学奥林匹克竞赛中数论部分的内容——同余方程的求解。顺便讲一下中国剩余定理。

    同余方程的概念

    关于同余和同余式的基本概念,如果还是了解的不清楚的话,请翻看本蒟蒻的这篇博客,讲解的非常详细:

    浅谈欧拉定理和乘法逆元

    那么,同余方程就是同余式里加了一个需要我们求解的未知数。

    比如,一种同余方程(就是我们首先要讲的一次同余方程)长成这个样子:

    [axequiv b\,\,\,(mod\,\,p) ]

    线性同余方程及其求解

    未知数指数为1的同余方程叫做线性同余方程,它的通式可以被表示为:

    [axequiv b\,\,\,(mod\,\,p) ]

    我们可以用扩展GCD求解线性同余方程。

    如果对于扩展GCD还不太明白的小伙伴,请移步本蒟蒻的这篇博客,讲解的也比较清晰:

    浅谈扩展GCD

    那么,我们知道扩展GCD可以被用来求解形如(ax+by=m(gcd(a,b)|m))这样的方程。我们只需要把这个同余方程式变成这样的普通等式即可。

    因为(axequiv b\,\,\,(mod\,\,p))等价于(ax-b)可以被(p)整除,那么可以设(ax-b)(p)(-y)倍,那么就有:

    [(ax-b) imes(-y)=p ]

    经过移项变形,得到:

    [ax+py=b ]

    那么我们就可以通过扩展GCD来求一组特解(x,y),其中的(x)就是我们需要的答案。

    注意,根据裴蜀定理,这个同余方程有解的条件应该是(b)(gcd(a,p))的倍数。

    同余方程组与中国剩余定理

    中国剩余定理相信大家都听说过,也叫做孙子定理,是我国古代数学的结晶之一(这个玩意真的是纯国产)(推销一下爱国情怀)。

    中国剩余定理是用来求解:一次同余方程组的。

    为了更好地理解中国剩余定理,我们来看一波历史:

    从前有一本叫《孙子算经》的书,里面提到了一道这样的问题:

    有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?

    大意: 一个整数除以三余二,除以五余三,除以七余二,求这个整数。

    那么这个问题可以被抽象为一个同余方程组:

    [egin{equation} left{ egin{array}{**lr**} xequiv2\,\,\,(mod\,\,3)& \ xequiv3\,\,\,(mod\,\,5) & \ xequiv2\,\,\,(mod\,\,7) & end{array} ight. end{equation} ]

    那么,将它扩展一下,我们可以有很多个方程,都形如(xequiv a_i\,\,\,(mod\,\,m_i))。将其构造成一个方程组,就会有一个线性同余方程组(当我没说)。

    假设一个数(M=prod^n_{i=1}m_i),那么设(M_i=M/m_i),即(M_i)表示所有模数中除了第(i)个模数的乘积。设(t_i)(M_i)(m_i)意义下的逆元。那么中国剩余定理就是:

    上述方程式有解,其通解为:

    [x=sum^n_{i=1}{a_it_iM_i} ]

  • 相关阅读:
    SpringBoot yml配置数据库密码特殊字符报错问题
    SpringBoot打jar包后无法访问resource下的文件
    js使用form提交工具类
    SpringBoot使用@ServerEndpoint无法@Autowired依赖注入问题解决
    java基于dfa实现敏感词过滤
    SpringBoot快速集成WebSocket实现群聊
    java生成序号前补0最简单的方法
    Mysql两个时间差计算方法
    python+selenium+webdriver环境搭建相关文档
    Java递归处理Tree树结构
  • 原文地址:https://www.cnblogs.com/fusiwei/p/12061643.html
Copyright © 2011-2022 走看看