前置芝士

  • 裴蜀定理
  • 同余的性质

exgcd

exgcd扩展欧几里得定理,常用来求解\(ax + by = gcd(a,b)\)的可行解问题

推导过程:

考虑我们有:

​ \(ax + by = gcd(a,b)\)——裴蜀定理

​ \(a_1x_1 + b_1y_1 = gcd(a_1,b_1)\)

当我们从\(1\)到\(2\)时,即\(gcd(a_1,b_1)\rightarrow gcd(a_2,b_2) = gcd(b_1,b_1\%a_1)\)

​ \(a_2x_2+ b_2y_2 = gcd(a2,b2)\Rightarrow b_1x_2 + (b_1\%a_1) y_2 = gcd(b_1,b_1\%a_1)\)

直到\(gcd(a_n,b_n)\ \ b_n = 0\)

​ \(a_nx_n+b_ny_n = gcd(a_n,b_n)\Rightarrow a_nx_n + 0 * y_n = gcd(a_n,0) = a_n\)

此时我们看出,\(x_n = 1,y_n = 0\)(\(y_n\)其实可以取任意一个数)时是一组特殊解

现在我们考虑怎么从\(n\rightarrow1\)推出我们需要的一组\(x,y\)

​ 从上面给出的例子,我们可以推出:

​ \(\because gcd(a,b) = gcd(b,a\%b)\)

​ \(\therefore a_1x_1 + b_1y_1 = b_1x_2 + (b_1-\lfloor\frac{b_1}{a_1}\rfloor\times a_1)y_2 = a_1y_2 + b_1(x_2-\lfloor\frac{a}{b}\rfloor y_2)\)

​ 然后我们可以推出:

​ \(\begin{cases}x_i = y_{i+1} \\ y_i = x_{i+1}+\lfloor\frac{a_i}{b_i}\rfloor y_{i+1}\end{cases}\)

​ solved!

下面附代码:

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

同余方程

​ 形如\(ax\equiv b(mod\ n)\)的方程称为同余方程,其中\(a,b,n\)给出,求出\(x\)

​ 我们按上面的方程可以化出这个式子\(ax+nk = b\)

​ 用\(exgcd\)求解即可

最新文章

  1. centos下MYSQL 没有ROOT用户的解决方法。
  2. SQLite学习笔记(七)&&事务处理
  3. 《征服 C 指针》摘录2:C变量的 作用域 和 生命周期(存储期)
  4. 删除html元素
  5. PAT 解题报告 1004. Counting Leaves (30)
  6. Linux企业运维高效技巧心得及分享
  7. 111个知名Java项目集锦,包括url和描述
  8. C# 越来越复杂了
  9. js 控制div 显示隐藏的问题
  10. java常见内存溢出(OOM)
  11. 【Beta】Phylab2.0: Postmortem
  12. GridControl的单元格中以buttonEdit实现文字和图片按钮并存的效果
  13. Session的过期时间如何计算?
  14. POJ-1511 Invitation Cards---Dijkstra+队列优化+前向星正向反向存图
  15. MARKY一下。
  16. MariaDB xtrabackup物理备份与还原
  17. 基于Spring-Cloud的微服务框架设计
  18. css3渐变特性
  19. CSS Grid 布局
  20. 20155222卢梓杰 课堂测试ch06补做

热门文章

  1. 抠网页标题栏logo(图标)
  2. Conda 环境移植 (两种方式)
  3. GKCTF2021 MISC
  4. JavaScript中的Error错误对象与自定义错误类型
  5. 疫情可视化part3
  6. 【每日一题】【比较中右,内部比较中右,注意边界带>=】2021年11月2日-搜索旋转排序数组-211102/220211
  7. 【每日一题】【DFS】【BFS】【队列】2021年12月5日-199. 二叉树的右视图
  8. 用最少的代码打造一个Mini版的gRPC框架
  9. PHP 视频源文件加密方案
  10. 【机器学习】李宏毅——Recurrent Neural Network(循环神经网络)