最大公约数 gcd,最小公倍数 lcm

1.GCD --最大公约数

  1. 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;
    }
    
  2. 欧几里得算法辗转相除法-中国的说法)
    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 -最小公倍数

  1. 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;
}

如果觉得对你有帮助,就点个赞支持一下吧,共同进步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

loongloongz

相互鼓励,相互帮助,共同进步。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值