GCD LCM
GCD(最大公约数)
欧几里得算法(辗转相除法)
原理
if(a%b==0) GCD=b
else GCD=b%(a%b)
设
a
≥
b
a\ge b
a≥b:
若
a
m
o
d
b
=
=
0
a\mod b==0
amodb==0,则
g
c
d
(
a
,
b
)
=
=
b
gcd(a,b)==b
gcd(a,b)==b(整除性质);
若
a
m
o
d
b
!
=
0
a\mod b!=0
amodb!=0,则
g
c
d
(
a
,
b
)
=
=
g
c
d
(
b
,
a
m
o
d
b
)
gcd(a,b)==gcd(b,a\mod b)
gcd(a,b)==gcd(b,amodb)(辗转相除)。
实现
extern int m,n;//已在其他位置定义m:被除数 n:除数
非递归算法
int gcd(int m,int n){
int r;//暂存余数
do{
r=m%n;
if(r!=0){
m=n,n=r;
}
}while(r!=0);
return n;
}
递归算法
int gcd(int m,int n){
if(n==0) return m;
else return gcd(n,m%n);
}
对于C++17,可以使用内置函数__gcd
lcm(最小公倍数)
a ∗ b = = g c d ( a , b ) ∗ l c m ( a , b ) a*b==gcd(a,b)*lcm(a,b) a∗b==gcd(a,b)∗lcm(a,b)
⇒ \Rightarrow ⇒ l c m ( a , b ) = = a ∗ b g c d ( a , b ) lcm(a,b)==\frac{a*b}{gcd(a,b)} lcm(a,b)==gcd(a,b)a∗b
int lcm(int a,int b){
return a/gcd(a,b)*b;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)