前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >808. 最大公约数 (递归gcd()函数)

808. 最大公约数 (递归gcd()函数)

作者头像
浪漫主义狗
发布2023-09-04 13:54:17
3340
发布2023-09-04 13:54:17
举报
文章被收录于专栏:HAUE_LYS'Blog

本文最后更新于 445 天前,其中的信息可能已经有所发展或是发生改变。

808. 最大公约数 (递归gcd()函数)

原题链接 描述 输入两个整数 a 和 b,请你编写一个函数,int gcd(int a, int b), 计算并输出 a 和 b 的最大公约数。

输入格式

共一行,包含两个整数 a 和 b。

输出格式

共一行,包含一个整数,表示 aa 和 bb 的最大公约数。

数据范围

1≤a,b≤1000

输入样例:

代码语言:javascript
复制
12 16

输出样例:

代码语言:javascript
复制
4

分析

  • 辗转相除法求解:

欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。

例如:假如需要求 100 和18 两个正整数的最大公约数,用欧几里得算法,是这样进行的: 100 / 18 = 5 (余 10) 18 / 10= 1(余8) 10 / 8 = 1(余2) 8 / 2 = 4 (余0) 至此,最大公约数为2 以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 100 和 18 的最大公约数2。

代码

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;

int gcd(int n,int m){  //递归辗转相除
    if(n%m==0){
        return m;
    }
    else return gcd(m,n%m);
}

int main()
{
    int n,m;
    cin>>n>>m;
    cout<<gcd(n,m);
    return 0;

}

扩展

  • nm的最小公倍数,则先求nm的最大公约数gcd(n,m),然后n*m/gcd(n,m)则为最小公倍数。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-6-15 9,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 808. 最大公约数 (递归gcd()函数)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档