今天来讲讲课
最大公因数是什么?
我们想要知道最大公因数是什么,我们要先知道公因数是什么(最大公因数似乎四年级就学了)
首先,我们知道,如果a能被b整除,我们说b是a的因数
比如6能被1、2、3、6整除,那1、2、3、6是6的因数
注意!!!6也是6的因数
同理,4的因数是1、2、4
6和4的因数中,1、2这两个因数是6和4都有的,我们叫他公因数
两个数最大的公因数,叫做最大公因数
我们来试一下,找出12和18的最大公因数:
12的因数:1、2、3、4、6、12
18的因数:1、2、3、6、9、18
公因数:1、2、3、6
最大公因数:6
---------------------------------------------------------------------------------------------------------------------------------
最大公因数怎么写?
我们要想写能求出最大公因数的程序,我们首先要找到一个容易用程序实现的找最大公因数的方法
这里介绍一种方法:辗转相除法,这是由伟大的欧几里得(c++数论的统治者,c++数论里有些东西都是他提出来的)提出来的
辗转相除法是这样的:
加入我们要找12和18的最大公因数
我们先求出18和12的余数:18%12==6
因为a和b的最大公因数和b与a%b的最大公因数是一样的,所以我们将问题转化为求12和6的最大公因数
12%6==0,余数为0,说明6为最大公因数
知道了原理,我们就很容易就能写出来了:
int gcd(long long a,long long b){//一般来说,我们用gcd(a,b)来表示求a和b的最大公因数
if(b==0)return b;//如果b为0,说明找到了最大公因数
else return gcd(b,b%a);//否则用两个数的余数继续计算
}
---------------------------------------------------------------------------------------------------------------------------------
最小公倍数是什么?
首先,我们知道,如果a能被b整除,我们说a是b的倍数
比如,24能被12整除,我们说24是12的倍数
注意!!!24也是24的倍数
两个数相同的倍数,我们称之为公倍数
所有公倍数中,最小的公倍数,我们称为最小公倍数
比如4和6的最小公倍数是12
---------------------------------------------------------------------------------------------------------------------------------
最小公倍数怎么写?
int lcm(long long a,long long b){//我们一般用lcm(a,b)来表示a和b的最小公倍数
return a/gcd(a,b)*b;
//求最小公倍数的公式是a*b/ a和b的最小公倍数
//注意细节,如果a和b很大,我们应该将a先除一下,然后×b,可以避免数据溢出
}