LCM与GCD算法

LCM(最小公倍数)和 GCD(最大公因数)在做ACM题时经常会用到,求两个整数的 LCM 和 GCD 有两种方法。

1. 辗转相除法(欧几里得算法)

  • 定理:对于任意的两个整数 a、b (a \geq b), 有 (a,b) = (b, a\%b) 。((a, b) 表示 ab 的最大公因数)
证明如下:

   a = qb + r,其中q为整数,0 \leq a < b
   设 d = (a, b),则 b = mda = nd
   则 a = qmd + r = nd,进一步推出 r = (n-qm)d
   故 d 也是 r 的因数,即 d \leq (b, r) = (b, a\%b)
   同理,设 p = (a, a\%b) = (a, r),则 r = spb = tpd \leq p
   则 a = qtp + sp = (qt+s)p
   故 p 也是 a 的因数, 即 p \leq (a, b) = d
   综上,d = p,原命题得证 。

所以要求两个数的最大公因数,只需根据递推式不断进行递推,并更新 a = b, b = a\%b, 直到 a\%b = 0 为止,则此时的 a 即为 (a, b) . 求得 (a, b) 以后,则 [a, b] (最小公倍数)便可由 ab/(a, b) 求得 。

2. 素因子分解

  • 定理:任意一个正整数都能分解成若干个素数的幂的乘积的形式 .
证明略 。

由此可知,a = p^{a_1}_1p^{a_2}_2...p^{a_n}_nb = p^{b_1}_1p^{b_2}_2...p^{b_n}_n . 其中 a_i,b_i\geq0
(a, b) = p^{min(a_1,b_1)}_1p^{min(a_2,b_2)}_2...p^{min(a_n,b_n)}_n [a, b] = p^{max(a_1,b_1)}_1p^{max(a_2,b_2)}_2...p^{max(a_n,b_n)}_n

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 基本运算 取模(mod)取余(rem) 定义 给定一个正整数p,任意一个整数n,一定存在等式 : n = kp +...
    passwd_阅读 2,331评论 0 3
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 2,215评论 0 2
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 4,176评论 0 2
  • 高级钳工应知鉴定题库(858题) ***单选题*** 1. 000003难易程度:较难知识范围:相关4 01答案:...
    开源时代阅读 6,439评论 1 9
  • 我承认我自卑 我真的很怕黑 每到黑夜来临的时候 我总是很狼狈 我彻夜在买醉 但我不曾后悔 只是想让自己清楚 为什么...
    樱花_e783阅读 148评论 0 0

友情链接更多精彩内容