#include
void main()
{
int a,b;
printf("请输入两个数:");
scanf("%d%d",&a,&b);
int gys(int a,int b);
int gbs(int a,int b);
printf("最大公约数=%d",gys(a,b));
printf("最小公倍数=%d",gbs(a,b));
}
int gys(int a,int b)
{
int gys,i;
for(i=1;i<=a&&i<=b;i++)
if(a%i==0&&b%i==0)
gys=i;
return(gys);
}
int gbs(int a,int b)
{
int gbs;
gbs=a*b/gys(a,b);
return(gbs);
}
int gcd(int a, int b)
{
int m = a>b?a:b;
int n = a>b?b:a;
if(m%n==0) return n;
else return gcd(n,m%n);
}
int lcm(int a, int b)
{
return a/gcd(a,b)*b;
}
调用自己试试吧
求最大公约数最直接的办法是从两数中较小数与2之间的所有整数中一个一个的找。
但这个方法有点浪费。
有两种有名的方法:
1.辗转相除法
2.更相减损之术
这两种方法比较有名,而且现在人教版的高中数学中已经介绍了这两种方法。
下面这个是第2个,因为它只需要加减法就可以,效率高。
int MaxFactor(unsigned int a,unsigned int b)
{
while(a!=b){
if(a>b)
{
a=a-b;
}else
{
b=b-a;
}
}
return a;
}
void main()
{
unsigned int x=MaxFactor(16,12);
}
求最小公倍数只要用 a*b/MaxFactor(a,b);