首页 > 编程语言 >扩展欧几里得算法

扩展欧几里得算法

时间:2023-10-06 22:02:30浏览次数:53  
标签:lfloor frac gcd 欧几里得 扩展 rfloor 算法 ax

算法

阅读此篇前可先阅读欧几里得算法

给定 \(a,b,s\),求 \(ax+by=s\) 的任意一组解。

证明:

裴蜀定理得:二元一次方程 \(ax+by=c\) 的有解条件是 \(\gcd(a,b) \mid c\)。

由欧几里得算法得知 \(\gcd(a,b)=\gcd(b,a\mod b)\)

假设我们求出了 \(\gcd(b,a\mod b)\) 的两个解 \((x',y')\)。

则可以得到:\(ax+by=bx'+(a\mod b)y'\)。

而我们又知道 \(a\mod b=a-b\times\lfloor{\frac{a}{b}}\rfloor\)。

则 \(ax+by=bx'+(a-b\times\lfloor{\frac{a}{b}}\rfloor)y'\)

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

所以有一组解:\(x=y',y=x'-\lfloor{\frac{a}{b}}\rfloor y'\)。

然后根据欧几里得算法一步一步往上推即可。

初始值要设为:\(x=1,y=0\)。

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

标签:lfloor,frac,gcd,欧几里得,扩展,rfloor,算法,ax
From: https://www.cnblogs.com/pdpdzaa/p/17556561.html

相关文章

  • 算法性能分析
       1.究竟什么是时间复杂度时间复杂度是一个函数,它定性描述该算法的运行时间。假设算法的问题规模为n,那么操作单元数量便用函数f(n)来表示,随着数据规模n的增大,算法执行时间的增长率和f(n)的增长率相同,这称作为算法的渐近时间复杂度,简称时间复杂度,记为O(f(n))2.什么是大O......
  • 文心一言 VS 讯飞星火 VS chatgpt (107)-- 算法导论10.1 5题
    五、用go语言,栈插入和删除元素只能在同一端进行,队列的插入操作和删除操作分别在两端进行,与它们不同的,有一种双端队列(deque),其插入和删除操作都可以在两端进行。写出4个时间均为O(1)的过程,分别实现在双端队列的两端插入和删除元素的操作,该队列是用一个数组实现的。文心一言:在G......
  • 文心一言 VS 讯飞星火 VS chatgpt (107)-- 算法导论10.1 5题
    五、用go语言,栈插入和删除元素只能在同一端进行,队列的插入操作和删除操作分别在两端进行,与它们不同的,有一种双端队列(deque),其插入和删除操作都可以在两端进行。写出4个时间均为O(1)的过程,分别实现在双端队列的两端插入和删除元素的操作,该队列是用一个数组实现的。文心一言:在Go......
  • 算法异或的运用
    题目描述在一条无限长的路上,有一排无限长的路灯,编号为1,2,3,4,…。每一盏灯只有两种可能的状态,开或者关。如果按一下某一盏灯的开关,那么这盏灯的状态将发生改变。如果原来是开,将变成关。如果原来是关,将变成开。在刚开始的时候,所有的灯都是关的。小明每次可以进行如下的操作:指......
  • 算法之动态规划(DP)求解完全背包问题(状态转移式方程推导)
    完全背包是01背包的进阶版。在这里补充一下代码随想录的完全背包状态转移式的推导。有兴趣的可以先看一看原版。状态转移方程状态:dp[i][j]选择前i个物品,容量为j的背包时所选物品价值总和最大。状态转移:dp[i][j]=max(dp[i-1][j-k*v[i]]+k*w[i])(k=0,1,2,3...)(j-k*v......
  • 深入探究数据结构与算法:构建强大编程基础
    文章目录1.为什么学习数据结构与算法?1.1提高编程技能1.2解决复杂问题1.3面试准备1.4提高代码效率2.学习资源2.1经典教材2.2在线学习平台2.3学习编程社区3.数据结构与算法的实际应用3.1排序算法3.2图算法3.3字符串匹配算法4.结论......
  • 基础算法--字符串
    \(KMP\)\(KMP\)算法(Knuth-Morris-Pratt算法)是一个著名的字符串匹配算法,效率很高,但是确实有点复杂。基本概念\(1\)、s[]是模式串,即比较长的字符串。\(2\)、p[]是模板串,即比较短的字符串。(这样可能不严谨。。。)\(3\)、“非平凡前缀”:指除了最后一个字符以外,一个字符串的全......
  • C++算法之旅、08 基础篇 | 质数、约数
    质数在>1的整数中,如果只包含1和本身这两个约数,就被称为质数(素数)866试除法判定866.试除法判定质数-AcWing题库\(O(n)\)boolisprime(intx){if(x<2)returnfalse;for(inti=2;i<x;i++)if(x%i==0)returnfalse;returntrue;......
  • 算法题:牛牛的三元组问题
    牛牛的三元组问题_牛客题霸_牛客网描述动物牛牛是一个勇敢的冒险家,它正在探索一个神秘的岛屿。岛上有许多宝藏,但是宝藏被隐藏在一系列数字中。牛牛找到了一个整数数组 nums,它相信这个数组中存在一些特殊的三元组,满足以下条件:三元组的和等于0。三元组中的元素不能重复。牛牛想按照......
  • 算法学习——“原地哈希法”
    这个方法名是一名网友给起的,很形象。简单理解就是,在一个数组中,将数值为a的元素放到索引为a的位置上去,这是一种降低空间复杂度的方法,在一些有条件限制的场景中非常适用。下面给两个力扣的例子进行详解。练习题目1:LCR120.寻找文件副本设备中存有 n 个文件,文件 id 记于数组......