栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

求最大公约数与最小公倍数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

求最大公约数与最小公倍数

目录

求最大公约数的方法

一、更相减损法

二、辗转相除法

条件表达式写法:

求最小公倍数的方法


求最大公约数的方法

阅读前提:具有c语言基础,了解基本数学知识

一、更相减损法

两个正整数a和b(a>b),它们的最大公约数等于a-b的差值c和较小数b的最大公约数。

我来介绍一下这个算法的优点,就是避免了大整数取模导致效率低下,但是运算次数要比辗转相除多得多,所以我们在使用的时候需要判断一下。

代码:

int gcd(int a,int b)
{
    if(a==b)
        return a;
    if(a>b)
        return gcd(a-b,b);
    if(a 

二、辗转相除法

两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。

其实就是把更相减损变得更高级一点(加减运算变乘除运算,提升了一个级别)

但是大整数取模会让一些题极为头疼,所以我们还是要慎重考虑什么时候用更相减损什么时候用辗转相除。

代码:

int gcd(int a,int b)
{
    if(b==0)
        return a;
    else
        return gcd(b,a%b);
}

条件表达式写法:

是辗转相除法的一个简便写法,只用一行即可搞定:

int gcd(int x,int y)
{
    return y?gcd(y,x%y):x;
}

求最小公倍数的方法

求最小公倍数的算法就是公式法。

根据关于最大公约数和最小公倍数的定理(gcd(a,b)×lcm(a,b)),我们可以发现:最小公倍数就是它们的乘积再除以最大公约数。

代码:

int lcm(int x,int y)
{
    return (x*y)/gcd(x,y);
}

注意什么时候要开long long

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/675941.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号