当前位置: 首页 > news >正文

数论问题 - L

数论问题

扩展欧几里得算法初步

算法原理

题目

求二元一次方程 \(ax + by = \gcd(a,b)\) 的一组可行解。

解法

由辗转相除法可知

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

因此要解原方程,只需解

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

不断递归下去,终究有 \(b=0\),此时 \(a = \gcd(a,b)\),代入 \(\begin{cases}x=1 \\ y =0\end{cases}\) 即可。

注意到

\[a \bmod b = a - b \cdot \Big \lfloor \frac{a}{b} \Big \rfloor \]

因此,原方程变为

\[bx + (a - b \cdot \Big \lfloor \frac{a}{b} \Big \rfloor) y = \gcd(a,b) \]

\[ay + b(x - y \cdot \Big \lfloor \frac{a}{b} \Big \rfloor) = \gcd(a,b) \]

注意到上式与原式骨架相同,则每次递归时,解的代换规则为

\[\begin{cases} x = y' \\ y = x' - y' \cdot \Big \lfloor \dfrac ab \Big \rfloor \end{cases} \]

二元一次不定方程计数问题

题目

给定不定方程 \(ax + by = c\),求解的个数。

解法

根据裴蜀定理,方程有整数解当且仅当 \(\gcd(a,b) | ax + by\)

利用扩展欧几里得算法可以求出方程 \(ax + by = \gcd(a,b)\) 的一组特解,记这组解为 \(\{x_0,y_0\}\),并记 \(g = \gcd(a,b)\)。将该方程变形得

\[a \cdot \frac{x_0c}{g} + b \cdot \frac{y_0c}{g} = c \]

因此原方程的一组整数特解 \(\{x_1, y_1\}\) 满足

\[\begin{cases} x_1 = \dfrac{x_0c}{g} \\ x_2 = \dfrac{y_0c}{g} \end{cases} \]

因此

\[\forall d \in \mathbb{Q},\ a(x_1 + db) + b(y_1-da) = c \]

因为需要保证 \(x_1+db,y_1-da \in \mathbb{Z}\),所以只需使得 \(db,da \in \mathbb{Z}\),进而 \(d\) 必须是 \(\dfrac{1}{g}\) 的整数倍,即所有可行的 \(d\) 中正的最小值为 \(\dfrac{1}{g}\)

将其代入,得到最小的整数步长为 \(d_x = \dfrac{b}{g},\ d_y = \dfrac{a}{g}\)

\(\forall s \in \mathbb{Z}\),该方程组的通解为

\[\begin{cases} x = x_1 + sd_x \\ y = y_1 - sd_y \end{cases} \]

界定

\[\begin{cases} x > 0 \\ y > 0 \end{cases} \]

可得

\[\begin{cases} x_1 + sd_x > 0 \\ y_1 - sd_y > 0 \end{cases} \]

\[-\frac{x_1}{d_x} \lt s \lt \frac{y_1}{d_y} \]

由于 \(s \in \mathbb{Z}\),那么

\[\Big \lceil \frac{-x_1 + 1}{d_x} \Big \rceil \le s \le \Big \lfloor \frac{y_1-1}{d_y} \Big \rfloor \]

取值范围的两个端点即为 \(s\) 的最小取值和最大取值。正整数解的个数即为 \(s\) 的取值个数,右界减左界即可。

http://www.gsyq.cn/news/1379046.html

相关文章:

  • MinIO密码设置保姆级教程:Docker Compose、Linux、Windows三大平台一次搞定
  • 九江6月雨季来临,房屋漏水怎么办?卫生间免砸砖防水、外墙、屋面+地下室渗漏。权威防水公司靠谱TOP5推荐(2026年6月本地最新深度调研) - 企业资讯
  • AMD Ryzen调试神器:SMUDebugTool全面使用指南
  • MinIO 不再“开放”,RustFS 能否成为更优选择?
  • ai开发者如何快速接入多模型api,taotoken五分钟搞定openai兼容调用
  • AlwaysOnTop:Windows窗口置顶工具的终极免费解决方案
  • Windows 11终极优化指南:用Win11Debloat让你的电脑提速70%
  • 控制论视角:神经ODE与Transformer的表示能力与聚类机制
  • 【配色系列】红色系 | 6类 x 2组 x 5色 | 色值 + 文字笔记示例
  • 图神经网络知识产权保护:评估标准与多领域数据集实战指南
  • CISP-PTE备考实战:用这个CentOS 6靶机镜像快速搭建你的第一个漏洞环境
  • 2026贵阳婚姻律师Top5权威榜单:如何选择本地专家? - 资讯焦点
  • 香港全屋定制工厂哪家强?RERA源木匠心为何稳居榜首? - 产品测评官
  • 最长公共子序列---dp
  • UE4SS:解锁虚幻引擎游戏的无限可能性,让每个玩家都能成为创造者
  • 基于A2A协议将智能体注册到Nacos3.x
  • 5分钟掌握文件完整性验证:HashCalculator终极免费批量哈希计算工具指南
  • 如何用YOLOv5实现FPS游戏智能瞄准:完整实战指南
  • PTP实现亚毫秒级同步
  • 基于OTA与锗管的复古过载效果器:从原理到DIY实战
  • 摄影老司机_给照片加边框工具
  • 如何在Windows上轻松查看和转换iPhone HEIF图片:HEIF实用工具指南
  • 【C++修仙录02】筑基篇:vector 使用
  • VMnet8 的8到底是什么意思?
  • 融合教育影子教师证交钱前怎么判断机构是否正规 - 最新教育培训热点
  • 1、从 Harness 到 Hermes:当 AI 学会为自己套上缰绳,自改进智能体时代已来
  • 抖音批量下载工具:如何高效自动化获取用户主页全作品
  • 三方物流平台-toB客户全生命周期详解
  • 10分钟快速上手:Nintendo Switch游戏备份终极指南
  • Java 第五章第六章 案例教程