每日一更1011:最大公约数与最小公倍数

简介: 题目描述:输入两个正整数m和n,求其最大公约数和最小公倍数。输入:两个整数输出:

题目描述:

输入两个正整数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;

}


目录
相关文章
|
6月前
|
JavaScript 前端开发 Java
最大公约数
【6月更文挑战第23天】
77 4
|
6月前
|
移动开发 算法
最大公约数和最小公倍数
【6月更文挑战第8天】最大公约数和最小公倍数。
69 9
|
6月前
每日一数——最大公约数与最小公倍数
每日一数——最大公约数与最小公倍数
|
7月前
|
算法
更相减损术求最大公约数
更相减损术求最大公约数
求最小公倍数
求最小公倍数
135 0
|
7月前
|
算法
详解最大公约数和最小公倍数
详解最大公约数和最小公倍数
wustojc5002最大公约数
wustojc5002最大公约数
52 0
求最大公约数
求最大公约数
78 0
|
人工智能 BI
求最大公约数和最小公倍数
求最大公约数和最小公倍数
94 0