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

数学--数论--最小公倍数+最大公约数

作者头像
风骨散人Chiam
发布2020-11-06 00:50:32
4990
发布2020-11-06 00:50:32
举报
文章被收录于专栏:CSDN旧文CSDN旧文CSDN旧文

数学中约定: GCD(a,b)为a ,b的最大公因数 LCM(a,b)为小公倍数

必须要知道的公式:

a*b = gcd(a,b) * lcm (a,b)

先说GCD怎么求:

int gcd(int a,int b){
	return __gcd(a,b); //不是我闹着玩,是真有这个函数
}

正经的来了,欧几里得算法

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

if-else 比较慢,三目运算符优化:

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

肯定不会爆栈,再给一种非递归算法:

int gcd(int  a, int  b){
    int  t;
    while(b){
        t = b;
        b = a % b;
        a = t;
    }
    return a;
}

接下来就是最小公倍数了: LCMab)=ab/GCDa,b)

但是要是a*b爆了 long long咋整

我们使用数学交换律大法:

L C M ( a , b ) = a / G C D ( a , b ) ∗ b LCM(a,b)=a /GCD(a,b)*bLCM(a,b)=a/GCD(a,b)∗b

因为 GCD一定是a或b的因子,所以上面的等式成立。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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