1.exgcd是什么?

exgcd大名扩展欧几里得算法,用来求形如 \(\gcd(a,b) = ax + by\) 的方程的通解。


2.推导

引理:存在 \(x,y\in \mathbb Z\) 使得 \(\gcd(a,b) = ax + by\)(裴蜀定理,请自行百度

当 \(b=0\) 时,\(\gcd(a,b)=a\),此时 \(x_1=1\), \(y_1=0\)

当 \(b\not=0\) 时,

由题,\(ax+by=\gcd(a,b)=\gcd(b,a\bmod b)=bx_2+(a\bmod b)y_2 ①\)

又因 \(a\bmod b=a-\lfloor \dfrac{a}{b}\rfloor b\)

则 \(ax+by=bx_2+(a-a\lfloor \dfrac{a}{b}\rfloor b)y_2\)

\(ax+by=bx_2+ay_2-\lfloor \dfrac{a}{b} \rfloor by_2\)

\(ax+by=ay_2+bx_2-b\lfloor \dfrac{a}{b} \rfloor y_2\)

\(ax+by=ay_2+b(x_2-\lfloor \dfrac{a}{b} \rfloor y_2) ②\)

将 \(②\) 式对比 \(①\) 式,得出:

方程 \(\gcd(a,b) = ax + by\) 的通解为 \(x=y_2\) , \(y=x_2-\lfloor \dfrac{a}{b} \rfloor y_2\)

//公式是我一个字一个字手敲的,要敲断了……


3.代码实现

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

最新文章

  1. [转]Asp.Net Core 简单的使用加密的Cookie保存用户状态
  2. RAF(RandomAccessFile)类
  3. href="#"和javasrcript:void(0)的区别
  4. android常用命令
  5. C++ STL之priority_queue
  6. Unreal Engine4 蓝图讲解
  7. SQL server 跨库插入数据
  8. Win10的革新与突破
  9. OC - 21.CALayer核心要点及实例解析
  10. 【CreateJS】WebStorm+Adobe Animate CC 搭配开发HTML5,入门教程
  11. 关于JAVA自带MD5的方法
  12. android view控件的显示和隐藏动画效果
  13. Android项目-高考作文项目架构(二)
  14. Android com.daimajia.slider.library.SliderLayout 去掉底部半透明标题背景
  15. Nodejs 操作 Sql Server
  16. window下github的学习心得
  17. JS中navigator对象详解
  18. nginx 报错 connect() failed (111: Connection refused) while connecting to upstream
  19. vue+vue-cli+vuex+vrouter 开发学习和总结
  20. zzuli2226:神奇的薯条

热门文章

  1. UOJ192 最强跳蚤
  2. 吴裕雄--天生自然JAVAIO操作学习笔记:IO操作实例、Scanner、数据操作流与合并流
  3. Docker 学习之镜像导入导出及推送阿里云服务器(三)
  4. Metasploit学习笔记——环境配置
  5. python2.7编译安装升级python3并安装Scrapy
  6. lsof(查看端口)
  7. .net core文件系统简介
  8. windows上使用git
  9. Netty 异步模型
  10. MyBatis 逆向工程(MyBatis 自动生成接口以及xml)的使用