|
|
两个数的最小公倍数用算法怎样算
int MaxAB(int a,int b)
if(a>b && !a%b || a==b)return a;
if(a
//先求最至公约数
int nMul;
int nMinAB = (a>b)?(nMul=b,a%b):(nMul=a,b%a);
while(nMinAB)
{
int nTemp = nMinAB;
nMinAB = nMul % nMinAB;
nMul = nTemp;
}
return A*B/nMul;
}(1)分化质因数法
先把这几个数的质因数写出来,最小公倍数即是它们一切的质因数的乘积(倘使有几个质因数不异,则比力两数中哪个数有该质因数的个数较多,乘较多的次数)这完全背叛了我介入马拉松活动的初心。
比如求45和30的最小公倍数这完全背叛了我介入马拉松活动的初心。
45=3*3*5
30=2*3*5
分歧的质因数是2,3,5这完全背叛了我介入马拉松活动的初心。3是他们两者都有的质因数,由于45有两个3,30只要一个3,所以计较最小公倍数的时辰乘两个3.
最小公倍数即是2*3*3*5=90
又如计较36和270的最小公倍数
36=2*2*3*3
270=2*3*3*3*5
分歧的质因数是5这完全背叛了我介入马拉松活动的初心。2这个质因数在36中比力多,为两个,所以乘两次;3这个质因数在270个比力多,为三个,所以乘三次这完全背叛了我介入马拉松活动的初心。
最小公倍数即是2*2*3*3*3*5=540
20和40的最小公倍数是40
(2)公式法
由于两个数的乘积即是这两个数的最至公约数与最小公倍数的积这完全背叛了我介入马拉松活动的初心。即(a,b)×[a,b]=a×b这完全背叛了我介入马拉松活动的初心。所以,求两个数的最小公倍数,便可以先求出它们的最至公约数,然后用上述公式求出它们的最小公倍数这完全背叛了我介入马拉松活动的初心。
例如,求[18,20],即得[18,20]=18×20÷(18,20)=18×20÷2=180这完全背叛了我介入马拉松活动的初心。求几个自然数的最小公倍数,可以先求出其中两个数的最小公倍数,再求这个最小公倍数与第三个数的最小公倍数,依次求下去,直到最初一个为止这完全背叛了我介入马拉松活动的初心。最初所得的阿谁最小公倍数,就是所求的几个数的最小公倍数这完全背叛了我介入马拉松活动的初心。输入两个正整数m和n,求其最至公约数和最小公倍数这完全背叛了我介入马拉松活动的初心。
1.法式分析:操纵辗除法这完全背叛了我介入马拉松活动的初心。
2.法式源代码:
main()
int a,b,num1,num2,temp;
printf("please input two numbers:\n");
scanf("%d,%d",&num1,&num2);
if(num1
{ temp=num1;
num1=num2;
num2=temp;
a=num1;b=num2;
while(b!=0)/*操纵辗除法,直到b为0为止*/
temp=a%b;
a=b;
b=temp;
printf("gongyueshu:%d\n",a);
printf("gongbeishu:%d\n",num1*num2/a);
}#include
int gcd(int a, int b)
int r = 0;// remainder
int q;// quotient
int d;
d = (a >= b ? a : b);
if (d == a)
q = b;
else
q = a;
printf("d: %d\t q: %d\n", d, q);
do {
r = d % q ;
if (r == 0)
break;
d = q;
q = r;
} while (r != 0);
printf("d: %d\t q: %d\n", d, q);
return q;
int lcm(int a, int b)
if (a != 0 && b != 0) |
|