题目描述:
输入两个正整数m和n,求其最大公约数和最小公倍数。
输入:
两个整数
输出:
最大公约数,最小公倍数
样例输入:
5 7
样例输出:
1 35
分析:这道题看着不难其实不好好想想的话,会很难做出来,分享一种方法:短除法
短除法:
假设我们输入 m=12,n=18 ,初始化最大公约数 gcd=1
我们发现 2 是12和18的一个公因子
我们令 m /= 2 ,n /= 2 ,gcd *= 2
现在 m == 6 , n == 9 , gcd == 2
又发现 3 是 6 和 9 的一个公因子
我们令 m /= 3 , n /= 3 , gcd *= 3
现在m == 2 , n == 3 , gcd == 6
我们找不到除 1 以外的 2 和 3 的公因子了
所以现在的 gcd == 6 就是我们要找的最大公因数
而最小公倍数 lcm = gcd m n = 6 2 3 = 36
直接放源码:(有需要自取,如有更好方法,欢迎在评论区留言!)

include <stdio.h>

int main(void)
{

int i,j,k,m,n,a=1,b;
scanf("%d%d",&m,&n);
if(m>n){
    j=n;
    k=m;
}else{
    j=m;
    k=n;
}//上面这个判断,是让j是最小的那一个
for(i=2;i<=j;i++){
    if(j%i==0&&k%i==0){//如果同时能取模为0,则这个i就是一个因子。
        j=j/i;
        k=k/i;
        a=a*i;
        i=1;//重置i的值下一次循环时还是从2开始
    }
}
b=a*j*k;//算最小公倍数
printf("%d %d\n",a,b);
return 0; 

}