一、不定方程

要求逆元,首先要知道什么是不定方程。

已知a,b,c,求解x,y,形如ax + by = c 的方程就是不定方程。

不定方程有两种解的情况:

1.无解

2.存在且有无限的解

那么,如何判断解的情况呢?

这时候,只需要拿出gcd就可以了,

若gcd(a,b) | c,则方程存在解,为什么呢

因为我们要使用扩展欧几里得来求不定方程,我们都知道欧几里得是求

ax + by = gcd(a,b)

中的 x,y的,因此如果我们要把c代换成gcd(a,b)的话,c一定是gcd(a,b)的整数倍,因此gcd(a,b) | c,因此如果c不是gcd(a,b)的整数倍的话,该不定方程无解。

接下来,就要解这个方程了

因为之前我们得到c一定是gcd(a,b)的整数倍,所以设c = k * gcd(a,b),则 k * x 和 k * y就是方程的一组解,很好理解,因为我们要求

ax + by = c

代入扩展欧几里得

ax + by = gcd(a,b)

因为二者是等价的,且 c = k * gcd(a,b),所以两边同乘k

k * (ax + by) = k * gcd(a,b)

化简得

k * x * a + k * y * b = k * gcd(a,b)

将k * gcd(a,b) 等量代换为 c,得到

k*x * a + k*y * b = c

所以对于扩展欧几里得,k*x和k*y就是该不定方程的一个解。

现在有特解,需要求通解:

因为有了解,所以它存在无限的解,所以设t为任意常数代入扩展欧几里得方程,设p1a + q1b = gcd(a,b)

设p = p1 * t

q = q1 * t

显然,因为 p1a + q1b = gcd(a,b)

所以pa + qb = gcd(a,b) * t

两边同除以gcd(a,b)

得到pa / gcd(a,b) + qb / gcd(a,b) = t

两边同除t

得到p1a / gcd(a,b) + q1b / gcd(a,b) = 1

p1a / gcd(a,b) + q1b / gcd(a,b) = 1

p1*(a / gcd(a,b) ) + q1*(b / gcd(a,b)) = 1

根据之前扩展欧几里得的公式,在ax + by = c中,

c必须是gcd(a,b)的整数倍,现在c = 1,gcd(a,b) = gcd( a / gcd(a,b) , b / gcd(a,b) )

所以c必须是gcd( a / gcd(a,b) , b / gcd(a,b) )的整数倍,且 c = 1,所以gcd( a / gcd(a,b) , b / gcd(a,b) ) 只能等于1,

所以a / gcd(a,b) 和 b / gcd(a,b)必须是互质的,这样方程才有解。

知道了判断条件后,我们就可以用扩展欧几里得求不定方程的通解。

二、同余&逆元

接下来需要了解一个概念,叫做同余:

如果 a mod m = b mod m,则称 a,b 在模 m 的意义下同余
可以写成 a ≡ b(mod m)

同余有以下的性质:

a ≡ a(mod m)
若 a ≡ b(mod m),则 b ≡ a(mod m)
若 a ≡ b(mod m); b ≡ c(mod m),则 a ≡ c(mod m)

若 a ≡ b(mod m), c ≡ d(mod m),则
a + c ≡ b + d(mod m)
a - c ≡ b - d(mod m)
ac ≡ bd(mod m)

通过上述定义,可以得出ax ≡ 1(mod m) 这个同余方程

等同于求解不定方程 ax - my = 1

所以求解ax ≡ 1(mod m)就变成了求解ax - my = 1,所以求解同余方程相当于求解不定方程。

这时候,我们可以引入逆元的定义:

逆元素是指一个可以取消另一给定元素运算的元素,

所以设a的逆元为x,则

ax = 1

在模m的情况下则为

ax ≡ 1(mod m)

这恰恰是一个同余方程,所以可以转化为ax - my = 1,用exgcd求解这个不定方程。

三、中国剩余定理(求同余方程组)

那么如何求解同余方程组呢?

同余方程组:

x ≡ a1(mod m1)

x ≡ a2(mod m2)

...

x ≡ an(mod mn)

在gcd(m1,m2,m3,...,mn) = 1(m1,m2,...,mn互质)时解同余方程组,求解x的最小非负整数解。

这时候设m = ∏(i = 1, n)mi,Mi = m/mi,

设 Miti = 1(mod mi) ,即ti为Mi在模mi情况下的逆元

因为m是m1~mn的公倍数,且Mi = m/mi,所以Mi是除了mi以外的m1~mn的公倍数,

k为除了i以外的1~n的中的整数,则 Mi = 0 (mod mk) ,即 mk | Mi

所以,aiMiti = 0 (mod mk) 所以只要模数是m1~mn之间且模数不是mi,aiMiti 就等于 0

因为我们定义 Miti = 1(mod mi)

所以 aiMiti = ai (mod mi),所以只要模数是mi,aiMiti 就等于ai

所以aiMiti只有在mod mi的时候才等于ai,mod 其它模数的时候都等于0

因此x = ∑(i = 1, n) aiMiti 时,对于每个方程组:

x = ai(mod mi)

代入x = ∑(i = 1, n) aiMiti 得

∑(i = 1, n) aiMiti = ai (mod mi)

在两边一起 mod mi,

设i = i1时

所以i只要不等于i1,aiMiti都等于0

所以 ai1 = ai1 (mod mi1)

所以x = ∑(i = 1, n) aiMiti 时,方程组有解

此时求出的x是特解,显然,x+km(k为整数)是通解。

易证如果要求最小整数解,只要把x对m取模即可。

中国剩余定理证毕Q.E.D

【数论】不定方程&逆元&中国剩余定理的更多相关文章

  1. acm数论之旅--中国剩余定理

    ACM数论之旅9---中国剩余定理(CRT)(壮哉我大中华╰(*°▽°*)╯)   中国剩余定理,又名孙子定理o(*≧▽≦)ツ 能求解什么问题呢? 问题: 一堆物品 3个3个分剩2个 5个5个分剩3个 ...

  2. [TCO 2012 Round 3A Level3] CowsMooing (数论,中国剩余定理,同余方程)

    题目:http://community.topcoder.com/stat?c=problem_statement&pm=12083 这道题还是挺耐想的(至少对我来说是这样).开始时我只会60 ...

  3. 数论E - Biorhythms(中国剩余定理,一水)

    E - Biorhythms Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Subm ...

  4. (伪)再扩展中国剩余定理(洛谷P4774 [NOI2018]屠龙勇士)(中国剩余定理,扩展欧几里德,multiset)

    前言 我们熟知的中国剩余定理,在使用条件上其实是很苛刻的,要求模线性方程组\(x\equiv c(\mod m)\)的模数两两互质. 于是就有了扩展中国剩余定理,其实现方法大概是通过扩展欧几里德把两个 ...

  5. 洛谷P2480 [SDOI2010]古代猪文(费马小定理,卢卡斯定理,中国剩余定理,线性筛)

    洛谷题目传送门 蒟蒻惊叹于一道小小的数论题竟能涉及这么多知识点!不过,掌握了这些知识点,拿下这道题也并非难事. 题意一行就能写下来: 给定\(N,G\),求\(G^{\sum \limits _{d| ...

  6. hihocode 九十七周 中国剩余定理

    题目1 : 数论六·模线性方程组 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:今天我听到一个挺有意思的故事! 小Hi:什么故事啊? 小Ho:说秦末,刘邦的将军 ...

  7. POJ1006——中国剩余定理

    题目:http://poj.org/problem?id=1006 中国剩余定理:x= m/mj + bj + aj 讲解:http://www.cnblogs.com/MashiroSky/p/59 ...

  8. NOI 2018 屠龙勇士 (拓展中国剩余定理excrt+拓展欧几里得exgcd)

    题目大意:略 真是一波三折的一道国赛题,先学了中国剩余定理,勉强看懂了模板然后写的这道题 把取出的宝剑攻击力设为T,可得Ti*x=ai(mod pi),这显然是ax=c(mod b)的形式 这部分用e ...

  9. [洛谷P4777] [模板] 扩展中国剩余定理

    扩展中国剩余定理,EXCRT. 题目传送门 重温一下中国剩余定理. 中国剩余定理常被用来解线性同余方程组: x≡a[1] (mod m[1]) x≡a[2] (mod m[2]) ...... x≡a ...

随机推荐

  1. 你真的了解cookies吗?

    互联网隐私安全,直接放链接吧,这一篇非常好的文章,详细,全面,专业. http://www.freebuf.com/articles/web/127266.html 浅谈Web客户端追踪 一.   W ...

  2. redis学习笔记04-事务

    1.redis事务 事务实际上指的是一组命令的集合,执行时会按顺序串行的执行,中途不能加入其它命令.它用来解决批处理需求. 在redis中的基本使用如下: >multi ok >incr ...

  3. PHP的cURL扩展库使用详解

    在还没有接触curl的时候,相信大家在获取网页内容的时,使用得最多的一个函数就是:file_get_contents(),但是它的可控制性不够灵活,无法处理错误情况,对于各种复杂情况的采集更是显得有点 ...

  4. vim编辑shell

      vi编辑 u撤销 i输入 dd删除游标所在的那一整行(常用) yy复制游标所在的那一行(常用) p 为将已复制的数据在光标下一行贴上 nyy n 为数字.复制光标所在的向下 n 行,例如 20yy ...

  5. 查看cpu性能和磁盘空间

    df -h查看当前磁盘空间 du -sh查看当前目录占用的磁盘空间 du -sh * 查看当前所有目录占用的磁盘空间   lscpu查看cpu信息 free查看空间总量

  6. Luogu P2680 运输计划(二分+树上差分)

    P2680 运输计划 题意 题目背景 公元\(2044\)年,人类进入了宇宙纪元. 题目描述 公元\(2044\)年,人类进入了宇宙纪元. \(L\)国有\(n\)个星球,还有\(n-1\)条双向航道 ...

  7. MAC中已有的虚拟环境在pycharm 中进行调用

    首先确定虚拟环境的路径: 打开工作环境配置文件,找到工作目录: 在pycharm中解释器中找到工作目录中对应的虚拟环境进行配置就可以了

  8. TZ_03_mybatis的注解开发

    1.一对多的注解开发 1>需求通过查询所有的用户,并且找到该用户的所有账户(使用延迟加载模式) @Select("select * from user") //sql语句查询 ...

  9. webstorm 2017.3.5之后 激活

    选择"license server" 输入:http://idea.codebeta.cn

  10. liunx定时删除文件(产生的日志.........)

    linux是一个很能自动产生文件的系统,日志.邮件.备份等.虽然现在硬盘廉价,我们可以有很多硬盘空间供这些文件浪费,让系统定时清理一些不需要的文件很有一种爽快的事情.不用你去每天惦记着是否需要清理日志 ...