通常用c++求a,b数的最小公倍数,需要先求出最大公约数,再用a*b=最大公约数*最小公倍数,最终才能算出最小公倍数
我介绍一种直接求最小公倍数的办法,放在最后了
一,最大公约数
定义:如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大公约数。(不重要)
两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数(核心思想)
int Gongbeishu(int a, int b)
{
int r;
while (b > 0)
{
r = a % b;
a = b;
b = r;
}
return a;
}
两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数
例1:a=8,b=6
8%6=2(%是取模,可理解成除法取余)
6%2=0(一直循环操作做,直到取得0,此时停止循环,2就是最大公倍数)
例2:a=5,b=3
5%3=2
3%2=1
2%1=0(1是最小公倍数)
解释:b对a取模,用得到的数再对b取模,只要得到的数不等于零,就一直重复,直到取模等于零,标红的数就是最大公约数
二,最小公倍数
定义:几个数共有的倍数叫做这几个数的公倍数,其中除0以外最小的一个公倍数,叫做这几个数的最小公倍数。
1.先介绍一个承接上文的方法
a*b=最大公约数*最小公倍数
算出了最大公约数,用a,b的乘积除以最大公约数,结果就是最小公倍数
2.介绍一种直接求出最小公倍数的方法(自己想的)
int gongbeishu(int a,int b)
{
int n = 1;
int temp = a * n;
while ((temp % b) != 0)
{
n++;
temp = a * n;
}
return temp;
}
要求a,b最小公倍数,我让a*1,看b能不能整除a*1,以此类推。
满足条件 ((a*n)%b)=0(n从1开始,每次循环加1,这样就可以找到最小公倍数了)
理解了就去实践,没理解的再理解理解,有问题问我哈