最大公约数和最小公倍数算法总结

来源:互联网 发布:tuigirl88最新域名 编辑:程序博客网 时间:2024/05/16 13:45

求最大公约数和最小公倍数

假设有两个数a和b,求a,b的最大公约数和最小公倍数实际上是一个问题,得出这两个数的最大公约数就可以算出它们的最小公倍数。最小公倍数的公式是a*b/m,m为最大公约数。
法一:穷举法
#include<stdio.h>
main()
{
int m,n,i;
scanf("%d%d",&m,&n);
for(i=m;;i--)
if(m%i==0&&n%i==0) break;
printf("%d,%d ",i,m*n/i);
}
---------------------------------------
#include<stdio.h>
main()
{
int m,n,t,i;
scanf("%d%d",&m,&n);
for(i=1;i<=(m<n?m:n);i++)
if(!(m%i)&&!(n%i)) t=i;
printf("%d,%d ",t,m*n/t);
}
法二:辗转相除法
#include<stdio.h>
main()
{
int m,n,t,r;
scanf("%d%d",&m,&n);
r=m*n;
t=m%n;
while(t)
{m=n;n=t;t=m%n;}
printf("%d,%d ",n,r/n);
}

——————————————————————

#include<stdio.h>
int gcd(int a,int b)//最大公约数greatest common divisor
{
if (a<b) return gcd(b,a);
else if (b==0) return a;
else return gcd(b,a%b);
}

int lcm(int a,int b)
{
return a*b/gcd(a,b);//最小公倍数lowest common mutiple
}
main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("最大公约数:%d\n",gcd(a,b));
printf("最小公倍数:%d\n",lcm(a,b));
}
分析:
402=8;
32%8=0;
故最大公约数为8
最小公倍数40*32/8=160

法三:更相减损法

#include<stdio.h>
main()
{
int m,n,r;
scanf("%d%d",&m,&n);
r=m*n;
while(m!=n)
if(m>n) m=m-n;
else n=n-m;
printf("%d,%d ",m,r/m);
}
分析:
40-32=8;
32-8=24;
24-8=16;
16-8=8;
8=8=0;

0 0