前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LCM与GCD算法

LCM与GCD算法

作者头像
hotarugali
发布2022-03-03 19:57:27
8160
发布2022-03-03 19:57:27
举报

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

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

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

证明如下: a = qb + r,其中 q 为整数,0 \leq a \lt 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}_1 p^{a_2}_2 \cdots p^{a_n}_nb = p^{b_1}_1 p^{b_2}_2 \cdots p^{b_n}_n?? . 其中 a_i, b_i \geq 0 。 故

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 辗转相除法(欧几里得算法)
  • 2. 素因子分解
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com