寒假培训——GCD(最大公约数),LCM(最小公倍数)

每个题目都有超链接,点击可以跳转到题目界面!!!

最大公约数和最小公倍数

1.c++自带__gcd(int m,int n)函数,可以用来求最大公约数;
2.最小公倍数=m*n/最大公约数;

在这里插入图片描述
另外两种求最大公约数的方法
M1.辗转相除法(欧几里得算法)

在这里插入图片描述
M2.辗转相减法(更相减损术)
在这里插入图片描述

又见GCD

纯暴力枚举就能做
在这里插入图片描述

多个数的最大公约数

在这里插入图片描述

多个数的最小公倍数

先求两个数的最大公约数,再根据这两个数的最大公约数求出这两个数的最小公倍数,再用求得的最小公倍数与另一个新数求最大公约数,再根据最大公约数求最小公倍数,以此类推……
在这里插入图片描述

LCM&GCD

假设gcd(a,b)=x,lcm(a,b)=y,则可得:gcdlcm=ab,即xy=ab,同除以x2,得y/x=(a/x)(b/x),令y1=y/x,a1=a/x,b1=b/x,则y1=a1b1,且a1∈[1,y1]。这样化简之后,再遍历[1,sqrt(y1)](只需遍历到 根号y1 即可)找满足gcd(a1,b1)==1的情况,更新答案。
注意特判a1*a1=y的情况,答案+1;其他情况答案+2。

注:
1.gcd(a,b)=x,lcm(a,b)=y可以推出ab=xy;但是反过来则不能推出;
2.最小公倍数一定是最大公约数的倍数;
3.gcd(a,b)成立的个数与gcd(a/x,b/x)的个数相等;
4.gcd(a,b)=x则gcd(ma,mb)=m*x;gcd(a/m,b/m)=x/m;

在这里插入图片描述

人见人爱gcd

在这里插入图片描述
在这里插入图片描述

高木同学的因子

先求两个数的最大公约数,再求最大公约数的所有因子,即为两个数的所有因子。
在这里插入图片描述

发布了11 篇原创文章 · 获赞 12 · 访问量 556

猜你喜欢

转载自blog.csdn.net/SSnTi/article/details/104244510