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

数论专题-最大公约数

本篇博客是【数论专题】系列的第 \(3\) 篇,希望大家多多支持。

最大公约数指两个整数 \(a,b\) 公有的因数中最大的数,记作 \(\gcd(a,b)\)

辗转相除法

辗转相除法用来求两个数的最大公约数,又称欧几里得算法,其核心为:\(\gcd(x,y) = \gcd(y, x\bmod\ y)\)

证明:

  • \(x < y\),则 \(\gcd(y, x\bmod\ y) = \gcd(y, x) = \gcd(x,y)\)
  • \(x\ge y\),设 \(x = q\times y + r\),其中 \(0\le r < y\),显然 \(r = x\bmod\ y\)。对于 \(x,y\)任意公约数 \(d\),因为 \(d\mid x,d\mid q\times y\),所以 \(d\mid (x - q\times y)\),即为 \(d\mid r\),因此 \(d\)\(y, r\) 的公约数。

辗转相除法的流程如下:

  • \(y = 0\),则说明答案为 \(x\)
  • \(y\ne 0\),则根据 \(\gcd(x, y) = \gcd(y, x\bmod\ y)\) 往下递归。

时间复杂度 \(O(\log \min(x,y))\)

int gcd(int x, int y)
{if(y == 0) return x;//y = 0 则返回答案 return gcd(y, x % y);//否则继续递归 
}

最小公倍数

最小公倍数指两个整数 \(a,b\) 公有的倍数中最小的数,记作 \(\text{lcm}(a,b)\)

定理:\(x\times y = \gcd(x, y) \times \text{lcm}(x, y)\)

根据以上定理,可以得出 \(\text{lcm}(x, y) = x\times y\div \gcd(x, y)\)

用辗转相除法求出 \(\gcd(x, y)\) 然后直接计算就行了,时间复杂度与辗转相除法一样。

int gcd(int x, int y)
{if(y == 0) return x;return gcd(y, x % y);
}
int lcm(int x, int y)
{return x * y / gcd(x, y);
}
http://www.sczhlp.com/news/13127/

相关文章:

  • ESP32-S3 控制 PWM呼吸灯
  • AI去、穿、换装软件下载,无内容限制,偷偷收藏
  • python中的reduce函数 - 实践
  • 在Android APK中嵌入Meterpreter的技术解析
  • JVM知识点v1.0 - Charon
  • Qt 6.8 编译MySql 连接驱动
  • ESP32 S3和STM32F103C8T6串口通信Arduino平台
  • ESP32-S3 控制 定时器中断
  • 配置VSCode实现可以编译调试openh264源码
  • 题解:AT_agc030_f [AGC030F] Permutation and Minimum
  • 学习随笔:ORACLE:优化器缺陷
  • CommunityToolkit.Mvvm的使用-ObservableProperty 特性
  • 读书笔记:揭秘Oracle重做日志:为什么它如此重要?
  • 关闭 PCDN 主要通过 设置、服务、注册表、组策略、PowerShell 等方法来实现。你可以根据自己的需求和系统版本选择合适的方案。
  • 故障恢复:ORA-01100 数据文件丢失,无备份,有创建数据文件以后的所有归档的恢复
  • redis下载启动
  • 【NAOI】QuiQ
  • 牛客多校10 E题
  • 详细介绍:css 属性@font-face介绍
  • 8.16每周总结
  • 测评组人员组成、技术要求架构
  • 信息学奥赛一本通1329细胞
  • 事倍功半是蠢蛋42 linux触发读写异常
  • 实用指南:如何解决WordPress数据库表损坏导致的错误
  • 阿里云大模型服务平台(百炼)的API调用
  • 事倍功半是蠢蛋38 切进去linux
  • 1111
  • 智慧农业(GIS技术)
  • 事倍功半是蠢蛋41 数据库备份
  • Protobuf