GCD与LCM

目录

1.GCD

1.1.GCD定义

1.2.GCD性质

1.3.GCD编程

1.3.1.欧几里得算法

2.LCM

2.1.LCM定义

2.2.算数基本定理

2.3.LCM编程

3.裴蜀定理


1.GCD

1.1.GCD定义

整数a和b的最大公约数是指能同时被a和b整除的最大整数,记为gcd(a,b)。例如,gcd(15,81)=3。

注意:由于-a的因子与a的因子相同,因此gcd(a,b)=gcd(|a|,|b|)。编码只需关注正整数的最大公约数。

1.2.GCD性质

(1).gcd(a,b)=gcd(a,a+b)=gcd(a,k*a+b);

(2).gcd(k*a,k*b)=k*gcd(a,b);

(3).定义多个整数的最大公约数:gcd(a,b,c)=gcd[gcd(a,b),c];

(4).若gcd(a,b)=d,则gcd(a/d,b/d)=1,即a/d与b/d互素;

(5).gcd(a+c*b,b)=gcd(a,b);

1.3.GCD编程

1.3.1.欧几里得算法

gcd(a,b)=gcd(b,a%b)(a≥0,b>0,若b等于0,则结果为0);

证明1:

设a=k*b+r,则r=a-k*b,r=a mod b;
假设d是a,b的一个公约数,则有,r能被d整除;
因此d是(b,a mod b)的公约数;
d是(b,a mod b)的公约数,则b能被d整除,a mod b能被d整除;
有因为a=k*b+r,故a能被d整除,因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等

证明2:

设c是a,b的最大公约数,即c=gcd(a,b),则有 a=mc,b=nc,其中m,n为正整数,且m,n互为质数
由 r= a mod b可知,r= a- qb 其中,q是正整数,
则 r=a-qb=mc-qnc=(m-qn)c.,b=nc,r=(m-qn)c,且n,(m-qn)互质(假设n,m-qn不互质,则n=xd, m-qn=yd 其中x,y,d都是正整数,且d>1,则a=mc=(qx+y)dc, b=xdc,这时a,b 的最大公约数变成dc,与前提矛盾,所以n ,m-qn一定互质)
则gcd(b,r)=c=gcd(a,b),即gcd(a,b)=gcd(b,a%b);

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

2.LCM

2.1.LCM定义

整数a和b的最小公倍数表示为为lcm(a,b)。例如,lcm(5,6)=30。

2.2.算数基本定理

任何大于1的正整数n都可以唯一分解为有限个素数的乘积:n=p^{c_{1}}_{1}p^{c_{2}}_{2}p^{c_{3}}_{3}...p^{c_{m}}_{m},其中c_{i}都为正整数,p_{i}都为素数且从小到大。

设a=p^{c_{1}}_{1}p^{c_{2}}_{2}p^{c_{3}}_{3}...p^{c_{m}}_{m},b=p^{f_{1}}_{1}p^{f_{2}}_{2}p^{f_{3}}_{3}...p^{f_{m}}_{m}
那么:gcd(a,b)=p^{min(c_{1},f_{1})}_{1}p^{min(c_{2},f_{2})}_{2}p^{min(c_{3},f_{3})}_{3}...p^{min(c_{m},f_{m})}_{m}
lcm(a,b)=p^{max(c_{1},f_{1})}_{1}p^{max(c_{2},f_{2})}_{2}p^{max(c_{3},f_{3})}_{3}...p^{max(c_{m},f_{m})}_{m}
可以推出gcd(a,b)lcm(a,b)=a*b,即lcm(a,b)=a*b/gcd(a,b)=a/gcd(a,b)*b。

注意:最好先做除法再做乘法,不然可能会溢出

2.3.LCM编程

int gcd(int a, int b) {
	if (b == 0) {
		return a;
	}
	return gcd(b, a % b);
}
int lcm(int a, int b) {
	return a / gcd(a, b) * b;
}

3.裴蜀定理

裴蜀定理(Bézout's identity),也称为裴蜀等式,Bézout等式,如果a与b均为整数,则有整数x和y使得ax+by=gcd(a,b)。

推论:整数a,b互素当且仅当存在整数x,y使得ax+by=1。

  • 25
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

lin..6

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值