题目 1011: [编程入门]最大公约数与最小公倍数——简单题

一、说明

文章用于个人学习C++代码编写使用,前期只会简单的将代码粘贴上来,没时间整体说明。

后续会慢慢完善文章体系。

所有文章会放置在《C++代码编程》栏目里

所有的题目均来源于C语言网

ps:所有代码都是自己编写实现并通过的,可能不是最优解,后续会编写相应的最优解在文章后面

二、题目

题目描述

输入两个正整数m和n,求其最大公约数和最小公倍数。

输入格式

两个整数

输出格式

最大公约数,最小公倍数

样例输入

5 7

样例输出

1 35

三、解题思路 

思路:看到求最大公约数第一反应是使用辗转相除法,也称欧几里得算法。

辗转相除法:使用较大的数 / 较小的数,如果余数为0,则较小的那个数就是最大公约数。

否则,继续使用较小的数 / 余数,直到最后余数为0的时候,此刻的除数就为最大公约数。

例:7 / 5 ...... 2   ----->   5 / 2 ...... 1   ----->   2 / 1 ...... 0   则最大公约数为1

当看到求最小公倍数的时候想到可以利用最大公约数进行求:两数之积 / 最大公约数 = 最小公倍数

当然,此题因为编写代码整洁方便,故使用了定义函数的方法进行,同样可以使用循环的方式实现,跟求第n年共有多少母牛那道递归题类似。  

四、代码实现

#include<iostream>
using namespace std;

int gcd(int m, int n){   //定义辗转相除法函数
    if(n == 0)           //当余数为0时,即为最大公约数
        return m;
    else
        return gcd(n,m%n);    //使用除数和余数继续进行辗转相除。
}

int lcm(int m, int n){       //定义求最小公倍数函数
    return (m * n) / gcd(m,n);       //最小公倍数求法:使用两个数的乘积除以最大公约数
}

int main()
{
    int m,n;
    cin >> m >>n; 
    if(m > n){      //使用辗转相除法需要确保被除数比除数大
        cout << gcd(m,n) << " " << lcm(m,n);
    }
    else
        cout << gcd(n,m) << " " << lcm(n,m);
}

五、运行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Saulstone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值