注意本文的证明都来源于这位大大大大大大大牛

知识点.扩展欧几里得求逆元

看完下面的证明后建议联系一下这题同余方程

可以对exgcd的用途和写法有有初步了解。

\(问题描述:对于三个自然数 a,b,c ,求解 ax+by=c 的 (x,y) 的整数解\)

\(先说一下贝祖定理: 两个整数 a、b 是互质的,等价于方程 ax+by=1有整数解。\)

\(更一般的,对于任意的k有ax+by=gcd(a,b)*k\)有整数解

注意,接下来才是正题

我们想求一组x,y使得

\[ax+by=gcd(a,b)
\]

\(根据b!=0可得\)

\[gcd(a,b)=gcd(b,a\%b)
\]

那就可以假设有\(x'、y'满足\)

\[bx'+(a\%b)y'=gcd(b,a\%b)
\]

\(替换一下也就是\)

\[ax+by=bx'+(a\%b)y'
\]

\(注意到(\frac{a}{b}向下取整)\)

\[a\ \%\ b=a-(\frac{a}{b})b
\]

\(替换进去得到\)

\[ax+by=bx'+(a-(\frac{a}{b})b)y'
\]

\(既然左边有a,b。那我们也对右边提取a,b\)

\[ax+by=ay'+b(x'-\frac{a}{b}y')
\]

聪明的你一定发现了这个东西是个递归的式子,那么我们肯定要找到那组base case(也就是递归基).

\(这样递归下去,当b=0时要满足ax+by=gcd(a,b).即为x=1,y=0\)

void exgcd(ll a,ll b,ll &x,ll &y)
{
if(!b) x=1,y=0;
else exgcd(b,a%b,y,x),y-=a/b*x;
}

\(算i对p的逆元时\)

\(exgcd(i,p,x,y)算出的x就是逆元了。\)

最新文章

  1. 喜马拉雅音频下载器 V1.2 支持专辑批量下载 喜马拉雅mp3下载导出 喜马拉雅下载器
  2. JDK环境变量详细讲解
  3. Computer Graphics Research Software
  4. git 命令--上传代码
  5. .NET GC Server-Background-GC
  6. 一步步学习ASP.NET MVC3 (7)——Controller,Action,ActionResult
  7. [置顶] 如何更改CSDN博客高亮代码皮肤的样式,使博客看起来更有范(推荐)
  8. javascript字符类型操作函数
  9. (转)iOS7界面设计规范(5) - UI基础 - 导航
  10. Java中ArrayList和LinkedList差别
  11. php的sendmail发件人邮箱设定
  12. Sublime3中如何安装markdown插件支持
  13. Python 中写一个装饰器实现限制频率访问
  14. Spring框架中获取连接池的几种方式
  15. 如何将自己的jar包发布到mavan中央仓库
  16. volatile和synchronized的区别
  17. Recursive sequence HDU - 5950 (递推 矩阵快速幂优化)
  18. [java,2017-05-16] java中清空StringBuffer的方法以及耗费时间比较
  19. (转第二方案)在 ASP.NET 環境下使用 Memcached 快速上手指南
  20. CSS 基础 例子 行高line-height

热门文章

  1. mysql命令行参数 --- 这些参数不同于 mysqldump 后的 那些参数(下边文章开头有链接) :2种类型的参数 含义是不一样的
  2. 【Java】FlowControl 流程控制
  3. Eclipse版本控制
  4. XML布局界面
  5. Cyclic Nacklace 杭电3746
  6. redis和memcache列出所有key
  7. CKEditor与定制
  8. C++写日志方法调试
  9. SpringCloud(六)学习笔记之Zuul
  10. MySql --FIND_IN_SET() 函数 (转)