|
两个数的最小公倍数用算法怎样算
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) |
|