刚学了递归的C语言小白来写第一篇题解。代码如下:
#include<stdio.h>
long long f(long long a,long long b){
//定义函数求最大公倍数。
if(b==0)return a;
return f(b,a%b);
}
int main(){
long long a,b,c;
scanf("%lld %lld",&a,&b);
c=f(a,b);
a/=c;
b/=c;
printf("%lld",a*b*c);
return 0;
}
解释:这里运用了欧几里得算法求两个数的最大公约数,然后再用最大公约数和输入的两个数除最大公约数的商一起作乘法,最后得到的自然就是最小公倍数了。(我试了一下,其实穷举法也是完全OK的,只不过欧式算法更为高效)
我是这么理解欧式算法的:把a和b看作两根筷子,把%看作一把刀对筷子不断地进行切割,先对齐筷子有相同部分的一头,然后从另一头开始每一次都去掉某根筷子不同的那段,下一次截取的对象(也就是说b跑到上一次a的位置上了)是另一根。如此循环,最后剩下相同的最大部分即为最大公约数。