学习目标:
了解并掌握辗转相除法求最大公因数
不会可以牢记库函数直接求解
学习内容:
最大公约数与最小公倍数算法
greatest common divisor 最大公约数简称gcd
least common multiple 最小公倍数简称lcm
我们在最初接触计算机语言的时候,对算法了解可能也比较少,但是我们在数学中也学习过最大公约数与最小公倍数的概念,我们先来了解一下辗转相除法
辗转相除法求最大公因数
举个例子:
求 102,64的最大公因数
102%64=38
64%38=26
38%26=12
26%12=2
12%2=0
(%是求余)
用大的数模小的数得到的余数变成下一次的模数直至最后的余数为零,那么此时的模数就是我们想要的答案具体代码参看如下
#include<iostream>
using namespace std;
int main()
{
int a=102,b=64;
while(b)
{
int c=a%b;
a=b;
b=c;
}
cout<<a;
return 0;
}
第二种是直接调用库函数求最大公因数
在库函数algorithm中,其实已经定义封装好了最大公因数函数__gcd(a,b)
它的原理是类似于辗转相除法的,如果记不住第一个函数,记住这个也是可以的,比赛的时候也可以使用哦
其中前面是两个下划线括号内是待求两个数字,时间复杂度也是log级别的,可以放心使用
具体代码操作参看如下:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a=102,b=64;
int c=__gcd(a,b);
cout<<c;
return 0;
}
简单的最大公因数求出来以后就是最小公倍数了
但是你还在慢慢的写代码求吗?那你就out了
这里是有个公式的,a*b=gcd(a,b)*lcm(a,b)
就是俩数相乘等于最小公倍数和最大公约数相乘
所以最小公倍数你还不会求吗