前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >最大公约数和最小公倍数

最大公约数和最小公倍数

作者头像
刘开心_1266679
发布2019-02-14 15:25:13
7080
发布2019-02-14 15:25:13
举报
文章被收录于专栏:开心的学习之路

       辗转相除法(欧几里得算法)算是求最大公约数最简单高效的算法了,这几行代码用最简洁的方式写了这个算法,值得牢牢记住:

代码语言:javascript
复制
#include <cstdio>

//最大公约数 

int Gcd(int a, int b)
{
	return b == 0 ? a : Gcd(b, a%b); 
}

//最小公倍数

int Lcm(int a, int b)
{
	return a / Gcd(a, b) * b; 
} 

int main()
{
	int a, b;
	scanf("%d%d", &a, &b);
	int gcd = Gcd(a, b);
	printf("%d与%d的最大公约数为%d\n", a, b, gcd);
	int lcm = Lcm(a, b);
	printf("%d与%d的最小公倍数为%d\n", a, b, lcm);
	return 0;
}

       既然采用了递归,自然会想到会不会栈溢出,有人证明出,Gcd函数的递归层数不会超过4.785lgN + 1.6723(N = max(a,b))。

求最小公倍数可以用lcm = a*b / gcd,为了防止a*b过大溢出,常采用先除以最大公约数再乘以b的方式。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年03月29日,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档