1.GCD --最大公约数
- GCD是表示整数 a 和 b 的最大公因数 是指 能同时整除a和b的最大整数,记为gcd(a, b)。 例如:gcd(4, 8) = 4。
具体的实现有:
1. 直接使用c++头文件algorithm中的__gcd(a,b),如果参加比赛(acm,蓝桥杯)较为方便#include<iostream> #include<algorithm> using namespace std; int main() { int a, b; cin >> a >> b; # a=8,b=12 时 cout << __gcd(a, b) ; //结果:4 return 0; } - 欧几里得算法(辗转相除法-中国的说法)
int gcd(int a, int b){ // 一般要求a>=0, b>0。 //若a=b=0,代码也正确,返回0 cout << a << ", " <<b << endl; return b? gcd(b, a%b) : a; }
2.LCM -最小公倍数
- lcm(a,b)表示a和b的最小公倍数,可以从算术基本定理推理得到。
算术基本定理(唯一分解定理):任何大于1的正整数n都可以唯一分解为有限个素数的乘积
可以由算法基本定理推出:
lcm(a,b) = a∗b/gcd(a,b) = a/gcd(a,b)∗b
注:我们使用先做除法再做乘法,如果先做乘法可能会溢出
所以我们求lcm(a,b)的时候,直接使用gcd就可以算出
实现:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a, b;
cin >> a >> b; // 测试: a=8, b= 12
cout << a / __gcd(a, b) * b; //结果: 24
return 0;
}
或者使用:
int lcm(int a, int b){
return a / gcd(a, b) * b;
}
如果觉得对你有帮助,就点个赞支持一下吧,共同进步。
本文介绍了如何计算两个整数的最大公约数(GCD)和最小公倍数(LCM)。GCD可通过欧几里得算法实现,而LCM可以通过GCD来计算。示例代码展示了C++如何利用内置函数和自定义函数来求解GCD和LCM。此外,还讨论了算术基本定理在求解LCM中的应用,以避免溢出问题。
6812

被折叠的 条评论
为什么被折叠?



