最大公约数与最小公倍数学习笔记

基本概念

如果数a能被数b整除,a就叫做b的倍数,b就叫做a的约数。约数和倍数都表示一个整数与另一个整数的关系,不能单独存在。如只能说16是某数的倍数,2是某数的约数,而不能孤立地说16是倍数,2是约数。
  "倍"与"倍数"是不同的两个概念,"倍"是指两个数相除的商,它可以是整数、小数或者分数。"倍数"只是在数的整除的范围内,相对于"约数"而言的一个数字的概念,表示的是能被某一个自然数整除的数。
  几个整数中公有的约数,叫做这几个数的公约数;其中最大的一个,叫做这几个数的最大公约数。例如:12、16的公约数有1、2、4,其中最大的一个是4,4是12与16的最大公约数,一般记为(12,16)=4。12、15、18的最大公约数是3,记为(12,15,18)=3。
  几个自然数公有的倍数,叫做这几个数的公倍数,其中最小的一个自然数,叫做这几个数的最小公倍数。例如:4的倍数有4、8、12、16,……,6的倍数有6、12、18、24,……,4和6的公倍数有12、24,……,其中最小的是12,一般记为[4,6]=12。12、15、18的最小公倍数是180。记为[12,15,18]=180。若干个互质数的最小公倍数为它们的乘积的绝对值。
  下面才是正题

最大公约数

定义

最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也有同样的记号。

求法

1.质因数分解法

把每个数分别分解质因数,再把各数中的全部公有质因数提取出来连乘,所得的积就是这几个数的最大公约数。
例如:求24和60的最大公约数,先分解质因数,得24=2×2×2×3,60=2×2×3×5,24与60的全部公有的质因数是2、2、3,它们的积是2×2×3=12,所以,(24,60)=12。

2.短除法

短除法求最大公约数,先用这几个数的公约数连续去除,一直除到所有的商互质为止,然后把所有的除数连乘起来,所得的积就是这几个数的最大公约数。
其实短除法就是质因数分解法,只是将质因数分解用短除符号来进行
注意:
而在用短除计算多个数时,对其中任意两个数存在的因数都要算出,其它没有这个因数的数则原样落下。直到剩下每两个都是互质关系。

上面的方法适用于数比较小的情况下,如果数很大会十分麻烦
(两数互质除外)
下面是重点
在这里插入图片描述

3.辗转相除法

辗转相除法:辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法。
例如,求(319,377):
∵ 319÷377=0(余319)
∴(319,377)=(377,319);
∵ 377÷319=1(余58)
∴(377,319)=(319,58);
∵ 319÷58=5(余29)
∴ (319,58)=(58,29);
∵ 58÷29=2(余0)
∴ (58,29)= 29;
∴ (319,377)=29。
可以写成右边的格式。
用辗转相除法求几个数的最大公约数,可以先求出其中任意两个数的最大公约数,再求这个最大公约数与第三个数的最大公约数,依次求下去,直到最后一个数为止。最后所得的那个最大公约数,就是所有这些数的最大公约数。

4.更相减损法

更相减损法:也叫更相减损术,是出自《九章算术》的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合。

《九章算术》原文如下“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。”

不是在说人话
翻译成人话如下:
第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。
第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。
则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。

其中所说的“等数”,就是最大公约数。求“等数”的办法是“更相减损”法。所以更相减损法也叫等值算法。

程序

自己实现

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

__gcd()

__gcd()函数是内置于algorithm头文件中的函数,主要是用于求两个数的最大公约数。

用法

求两个数的最大公约数:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
    
    
    ll a,b,sum;
    cin>>a>>b;
    sum=__gcd(a,b);
    cout<<sum<<endl;
	return 0;
}

最小公倍数

定义

几个数共有的倍数叫做这几个数的公倍数,其中除0以外最小的一个公倍数,叫做这几个数的最小公倍数。
自然数a、b的最小公倍数可以记作[a,b],自然数a、b的最大公因数可以记作(a、b),当(a、b)=1时,[a、b]= a×b。如果两个数是倍数关系,则它们的最小公倍数就是较大的数,相邻的两个自然数的最小公倍数是它们的乘积。最小公倍数=两数的乘积/最大公约(因)数, 解题时要避免和最大公约(因)数问题混淆。

适用范围:

分数的加减法,中国剩余定理(正确的题在最小公倍数内有解,有唯一的解)。因为,素数是不能被1和自身数以外的其它数整除的数;素数X的N次方,是只能被X的N及以下次方,1和自身数整除。所以,给最小公倍数下一个定义:S个数的最小公倍数,为这S个数中所含素因子的最高次方之间的乘积。

计算方法

和最大公约数类似

程序

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
    
    
    ll a,b,sum;
    cin>>a>>b;
    sum=__gcd(a,b);//最大公约数
    sum=a/sum*b;   //最小公倍数
    cout<<sum<<endl;
	return 0;
}

或者是:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int gcd(int a,int b)
{
    
    
	if(b==0)
	{
    
    
		return a;
	}
	return gcd(b,a%b);
}
int main()
{
    
    
    ll a,b,sum;
    cin>>a>>b;
    sum=gcd(a,b);//最大公约数
    sum=a/sum*b;   //最小公倍数
    cout<<sum<<endl;
	return 0;
}

最大公约数与最小公倍数的性质

gcd//最大公因数
lcm//最小公倍数

  1. 若a|m,b|m则gcd(a,b)|m
  2. 若d|a,d|b则d|lcm(a,b)
  3. lcm(a,b)=ab/(gcd(a,b))
  4. 设m,a,b是正整数,则lcm(ma,mb)=m×lcm(a,b)
  5. 若m是非零正整数a1,a2,a3,a4……,an的公倍数,则lcm(a1,a2,a3,a4……an)|m

常用结论

  1. (1)如果两个自然数是互质数,那么它们的最大公约数是1,最小公倍数是这两个数的乘积。在这里插入图片描述

    栗子:8和9,它们是互质数,所以(8,9)=1,[8,9]=72。

  2. (2)如果两个自然数中,较大数是较小数的倍数,那么较小数就是这两个数的最大公约数,较大数就是这两个数的最小公倍数。在这里插入图片描述

    栗子:18与3,18÷3=6,所以(18,3)=3,[18,3]=18。

  3. (3)两个整数分别除以它们的最大公约数,所得的商是互质数。在这里插入图片描述

    栗子:8和14分别除以它们的最大公约数2,所得的商分别为4和7,那么4和7是互质数。

  4. (4)两个自然数的最大公约数与它们的最小公倍数的乘积等于这两个数的乘积。在这里插入图片描述

    栗子:12和16,(12,16)=4,[12,16]=48,有4×48=12×16,即(12,16)× [12,16]=12×16。

  5. (5)a与b的最大公约数是最小的a与b的正线性组合,即对于方程xa+yb=c来说,若x,a,y,b都为整数,那么c的最小正根为gcd(a,b).没栗子了

猜你喜欢

转载自blog.csdn.net/Richard_1101/article/details/107607455