题目描述:
输入两个正整数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;
}