��С������ ��С���������� ����Ȼ������С�������������ַ����� ��2����ʽ���������������ij˻������������������Լ������С�������Ļ�������a��b����[a��b]=a��b�����ԣ�������������С���������Ϳ�����������ǵ����Լ����Ȼ����������ʽ������ǵ���С��������
���Լ�� ���磬12��30�Ĺ�Լ���У�1��2��3��6������6����12��30�����Լ���� �������������Լ����Ҫ������Ѱ�ҷ����� * �������ֽ������ӣ�Ȼ��ȡ��ͬ���е�������� ����С��������lcm���Ĺ�ϵ��gcd(a, b)��lcm(a, b) = ab ����������������ӿ����ڼ�����������С�������������������������� ����������������Ӻ���С�������д��ڷ����ɣ� * gcd(a, lcm(b, c)) = lcm(gcd(a, b), gcd(a, c)) �����������(0, 0)��(a, b)��������ͨ����������ĵ����Ŀ������(0, 0)һ��֮�⣩����gcd(a, b)�� 要点归纳最大公约数 •几个数公有的约数,叫做这几个数的公约数,其中最大的一个叫做这几个数的最大公约数 •数学上,a和b的最大公约数记为(a, b) •编程中,计算两个数最大公约数的方法通常记为gcd(a,b) 最小公倍数 •几个数公有的倍数,叫做这几个数的公倍数,其中最小的一个叫做这几个数的最小公倍数 •数学上,a和b的最小公倍数记为[a,b] •编程中,计算两个数最小公倍数的方法通常记为lcm(a,b) •a x b = gcd(a, b) x lcm(a,b) 互质 •如果两个数的最大公约数是1,则称这两个数互质 ①分解质因数法 例:求24和60的最大公约数与最小公倍数 每个合数都可以写成几个质数相乘的形式 最大公约数是两个数所有公有质因数的乘积 24和60公有的质因数是2、2、3,所以24和60的最大公约数是2x2x3=12 最小公倍数是两个数所有公有质因数和其各自独有质因数的乘积 24和60公有的质因数是2、2、3,24的独有质因数是2,60的独有质因数是5,所以24和60的最小公倍数是2x2x3x2x5=120 ②短除法 例:求24和60的最大公约数与最小公倍数 24和60的最大公约数为2x2x3=12(左侧3个数之积) 24和60的最小公倍数为2x2x3x2x5=120(左侧3个数和下面2个数之积) 三个数和两个数的情况不同,请看下面的例子,要仔细体会! 例:求12、30和150的最大公约数与最小公倍数 12、30和150的最大公约数为2x3=6 12、30和150的最小公倍数为2x3x5x2x1x5=300 ③辗转相除法(欧几里德算法) 算法步骤: 1.输入两个正整数m, n(m>n) 2. 计算m除以n的余数r 3.m=n, n=r 4. 若r=0, 则m和n的最大公因数等于m;否则转到第2步 5. 输出最大公因数m 例:求24和60的最大公约数与最小公倍数 60 %24 = 12 24 %12 = 0 24和60的最大公约数是12 a x b = gcd(a, b) x lcm(a,b) —》 lcm(a,b) = a x b / gcd(a, b) 24和60的最小公倍数=24x60/12=120 主要代码: 递归: int gcd(int a, int b){ return (b==0) ? a : gcd(b, a%b); } 非递归: int gcd(int a, int b){ int t=a%b; while(t){ a=b; b=t; t=a%b; } return b; } int lcm(inta, int b){ return a/gcd(a, b)*b; } 举个栗子 【NOIP2018初赛普及组c++】 【参考答案】 最小公倍数(Least Common Multiple,缩写L.C.M.),如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数,对于两个整数来说,指该两数共有倍数中最小的一个。计算最小公倍数时,通常会借助最大公约数来辅助计算。 最大公约数,也称最大公因数、最大公因子,指两个或多个整数共有约数中最大的一个。a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也有同样的记号。求最大公约数有多种方法,常见的有质因数分解法、短除法、辗转相除法、更相减损法。与最大公约数相对应的概念是最小公倍数,a,b的最小公倍数记为[a,b]。 求最大公约数和最小公倍数算法小拳头 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 一、求最大公约数:欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个正整数a,b的最大公约数 其计算原理依赖于下面的定理: 定理:两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。最大公约数缩写为gcd。 gcd(a, b) = gcd(b, a mod b)(前提条件是假设a > b 且 r = a mod b, r 不为0) c++代码:
二、求最小公倍数 在已经算出整数a、b的最大公约数的基础上,我们可以通过下面的公式来求出它们的最小公倍数 lcm(a, b) = (a * b)/gcd(a, b)
三、求n个数的最大公约数 思路:把n个数保存为一个数组,参数为数组的指针和数组的大小(需要计算的数的个数),然后先求出gcd(a[0], a[1]),然后将所求的gcd与数组的下一个元素作为gcd的参数继续求gcd,这样就产生一个递归的求ngcd的算法 c++代码:
四、求n个数的最小公倍数 思路:算法过程和n个数的最大公约数求法类似,求出头两个的最小公倍数,再讲其和下一个元素求最小公倍数直到数组末尾,这样就产生一个地柜的求nlcm的算法 c++代码: 什么是最大公约数和最小公倍数?一、求最大公因数的三种方法: 最大公因数定义: (最大公约数、最大公因子):指两个或多个整数共有约数中最大的一个。 最小公倍数定义: 两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。
如何求最大公约数?方法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。 那么最后的除数就是这两个数的最大公约数。
最大公约数是什么意思?最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。 a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也有同样的记号。
什么是最大的公因数?最大公因數(英語:highest common factor,hcf)也稱最大公約數(英語:greatest common divisor,gcd)是數學詞彙,指能够整除多個整數的最大正整数。 而多個整数不能都为零。 例如8和12的最大公因数为4。
|