gcd&lcm

gcd指的是greatest common divisor就是最大公约数。
lcm指的是Least Common Multiple,即最小公倍数。
一、最大公约数
最大公约数是数论中一个重要的概念
设a、b不全为零,同时整除a、b的整数称为他们的公约数,显然a、b的公约数只有有限多个,我们将其中最大的一个称为a、b的最大公约数表示用符号 (a,b)表示。显然最大公约数是一个正整数。
当 (a,b)=1时,我们称a与b互质(互素),这种情形特别重要。
那么问题来了 我们怎么求最大公约数呢? 通常用辗转相除法来写 我的个人喜好是用递归
我们可以很显然地理解这个等式:
gcd(a,b)=gcd(a−b,b)
但是呢 这么一次一次减太慢了 所以我们一次能减多少就减多少 就相当于直接除 这就是简述版的辗转相除

int gcd(int a, int b){
     if(b==0)return a;
     else return gcd(b,a%b);
}

二、最小公倍数

那么我们再简单地谈谈最小公倍数
设a、b是两个非零正整数,,一个同时为a、b的倍数的数称为他们的一个公倍数, 两个数的公倍数显然有无穷多个, 我们把这其中的最小的正整数称为他们的最小公倍数
那最小公倍数就很好求了
lcm(a,b)=a*b/gcd(a,b)

posted @ 2022-03-06 20:19  心悟&&星际  阅读(391)  评论(0编辑  收藏  举报