这个算法是不是正确,不太好懂啊
前不久网上看到的一个求最大公约数和最小公倍数的算法, 不是传统的算法,当时没读懂算法,只试了一组数得到正确答案以为没问题,做为一下与我平时常规做法不同的案例留下了,其实它是个错误的,今天想读懂什么原理,查了一下辗转相除法,才搞明白,读不懂的东西真不一定是对的,不过很多数学问题太过有技巧的,写成C代码可读性都差了,差到程序可以错了难于发现,下面这个是我重写的,大家看看还有没有问题:
#include<stdio.h>
int maxaminb(int a,int b,int*maxa,int*minb)
{
int c,d,e;
if(a<1||b<1||!maxa||!minb)
return 0;//参数错误
if(b>a) {c=a; d=b%a;}
else {c=b; d=a%b;}
while (d)//辗转相除法
{
e=c; c=d; d = e%d;
}
*maxa = c;
*minb = a*b/c;
return 1;
}
int main()
{
int a,b,c,d;
scanf("%d%d",&a,&b);
if(!maxaminb(a,b,&c,&d))
return 0;
printf("%d与%d 最大公约数%d 最小公倍数%d",a,b,c,d);
return 0;
}