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

扩展欧几里得算法

时间:2024-09-09 22:35:58浏览次数:9  
标签:right gcd int dfrac 欧几里得 扩展 算法 ax left

给定整数 \(a, b, c\)。求一组整数解 \(x, y\) 使得:

\[ax + by = c \]

或报告无解。


首先考虑 \(c = \gcd(a, b)\) 的简单情况,即:

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

当 \(c \mid \gcd(a, b)\) 时,我们可以将等式两边同时乘 \(\dfrac c{\gcd(a, b)}\) 已得到原问题的解,即 \(a \gets a \times \dfrac c{\gcd(a, b)},b \gets b \times \dfrac c{\gcd(a, b)}\)。根据裴蜀定理我们断言原问题有解当且仅当 \(c \mid \gcd(a, b)\)。

考虑这个求解弱化问题。

设:

\[ax_1 + by_1 = \gcd(a, b) \\ bx_2 + (a \bmod b)y_2 = \gcd(a, b) \]

我们希望构造任意一组合法的 \(x_1,y_1\)。\(x_2,y_2\) 暂时辅助我们实现这一点。

那么:

\[\begin{aligned} \gcd(a, b) &= bx_2 + (a \bmod b)y_2 \\ &= bx_2 + \left( a - \left \lfloor \dfrac ab \right \rfloor \times b\right)y_2 \\ &= ay_2 + b\left(x_2- \left \lfloor \dfrac ab \right \rfloor y_2\right) \end{aligned} \]

所以 \(\left\{ \begin{matrix}x_1 = y_2,\\ y_1=\left(x_2- \left \lfloor \dfrac ab \right \rfloor y_2\right) = \gcd(a, b) \end{matrix}\right.\) 就是一组合法的构造解。

所以问题转化成了求解 \(x_2,y_2\)。这与原问题相同。递归即可。

递归的边界是 \(b = 0\)。即需要构造一组解 \(x,y\) 使得:

\[ax + 0 \cdot y = a \]

显然 \(\left\{ \begin{matrix}x=1,\\ y\in \mathbb Z\end{matrix}\right.\) 即可。这里取 \(y = 0\)。

int x, y;

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

标签:right,gcd,int,dfrac,欧几里得,扩展,算法,ax,left
From: https://www.cnblogs.com/2huk/p/18405503

相关文章

  • 数据结构与算法 第12天(排序)
    一、排序方法分类按照数据存储介质:内部排序:数据量不大、数据在内存,无需内外存交换数据外部排序:数据量较大、数据在外存(文件排序)将数据分批调入内存排序,结果放到外存按照比较器个数:串行排序:单处理机(同一时刻比较一对元素)并行排序:多处理机(同一时刻比较多对元素)按主......
  • 多输入多输出 | Matlab实现DBO-BP蜣螂算法优化BP神经网络多输入多输出预测
    多输入多输出|Matlab实现DBO-BP蜣螂算法优化BP神经网络多输入多输出预测目录多输入多输出|Matlab实现DBO-BP蜣螂算法优化BP神经网络多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料预测效果基本介绍多输入多输出|Matlab实现DBO-BP蜣螂算法......
  • 基于协同过滤推荐算法+springboot+vue的电商系统
    博主主页:猫头鹰源码博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万+、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作​主要内容:毕业设计(Javaweb项目|小程序|Python|HTML|数据可视化|SSM|SpringBoot|Vue|Jsp|PHP......
  • 【Leetcode算法面试题】-1. 两数之和
    文章目录算法练习题目思路参考答案算法1算法2算法3算法练习面试经常会遇到算法题目,今天开启算法专栏,常用算法解析题目**给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设......
  • 《Java 归并排序:高效稳定的排序算法》
      一、归并排序简介介绍归并排序是一种基于分治思想的经典排序算法,适用于各种规模的数据排序任务。 二、算法原理(一)分治策略将未排序数组分割成两个子数组,递归地对子数组进行排序,最后合并成有序数组。(二)关键步骤1.分割阶段:将数组分成两个子数组,通常是平均分割。2.......
  • 24暑假算法刷题 | Day41 | 动态规划 IX | LeetCode 188. 买卖股票的最佳时机 IV,309.
    目录188.买卖股票的最佳时机IV题目描述题解309.买卖股票的最佳时机含冷冻期题目描述题解714.买卖股票的最佳时机含手续费题目描述题解188.买卖股票的最佳时机IV点此跳转题目链接题目描述给你一个整数数组prices和一个整数k,其中prices[i]是某支给定......
  • 哈希表、算法
    哈希表hash:在编程和数据结构中,"hash"通常指的是哈希函数,它是一种算法,用于将数据(通常是字符串)映射到一个固定大小的数字(哈希值)。哈希函数在哈希表中尤为重要,哈希表是一种通过哈希函数将键映射到表中位置的数据结构,以实现快速的数据插入和检索。哈希表(HashTable):也称为散......
  • 【机器学习】嘿马机器学习(算法篇)第10篇:逻辑回归,学习目标【附代码文档】
    本教程的知识点为:机器学习算法定位、K-近邻算法1.4k值的选择1K值选择说明1.6案例:鸢尾花种类预测--数据集介绍1案例:鸢尾花种类预测1.8案例:鸢尾花种类预测—流程实现1再识K-近邻算法API1.11案例2:预测facebook签到位置1项目描述线性回归2.3数学:求导1......
  • C#-使用Serilog框架快速实现日志及其相关扩展
    目录一、Serilog日志实现1、实现 ILogEventSink接口2、日志类Log3、日志级别LogLevel 4、ILogger接口5、日志服务实现6、日志视图View7、ViewModel二、功能扩展1、日志扩展方法2、Trace追踪扩展日志3、自动滚动至底部一、Serilog日志实现安装NuGet包:Serilog......
  • Binary Search 二分查找算法:逻辑的舞蹈,二分法的精准步伐
    BinarySearch二分查找算法:逻辑的舞蹈,二分法的精准步伐二分查找算法,也称为二分搜索算法(BinarySearch),是一种在有序数组中查找特定元素的高效算法。它通过反复将搜索区间减半来快速定位目标值。二分查找算法的效率远高于线性搜索,因为它每次比较都能排除掉一半的搜索空间。......