C语言算法————最大公约数和最小公倍数 (附原代码)递归的辗转相除法/常归解法基础+暴力求法

本文介绍两种不同方法来求:暴力、辗转相除法

从原理逐步分析,免费内容,建议先收藏


1、原理分析

No.1两数之间大小关系

最大公约数肯定是小于或等于2数之间最小的那个数

最小公倍数肯定是大于或等于2数之间最大的那个数

所以弄清楚两数之间的大小关系显得尤为重要这也是在进行操作时,一般要包含的步骤

No.2计算方法

两者之间拥有着共同的计算方法,都是能整除或者被整除最大公因数或最小公倍数

2、暴力求解

所谓暴力求法就是通过循环寻找同时满足条件的数

No.1上图求最大公约数(这里为函数)

a69e249889244c46bf9f6c31b2de0553.png

原代码 :

#include <stdio.h>
//暴力求解最大公约数,没什么技巧
int dgy(int x,int y){
    if(y>x){                                           //交换大小,知道x,y的大小这点还蛮重要的
        int temp=x;
        x=y;
        y=temp;
    }
    for(int i=y;i>0;i--){
        if(x%i==0&&y%i==0)return i;                    //满足比两数小同时能被两数整除的最大数
    }return 0;                                         //这里也可以用逗号表达式求x,y小的数
}

No.2上图求解最小公倍数

对于最小公倍数,我们可以用最大公倍数来公式求

当然也可以用同样的思路暴力求解

a947646627f14e07b941168cc18e49d9.png

原代码:

//最小公倍数一般用公式,当然也可以暴力和上面差不多
int xgb(int x,int y){
    return x*y/dgy(x, y);
}
//不厌其烦地给大家写一遍暴力求最小公倍数
int xgbq(int x,int y){
    if(y>x){
        int temp=x;
        x=y;
        y=temp;
    }
    for(int i=x;;i++){
        if(i%x==0&&i%y==0)return i;
    }
    return 0;
}

3、求最大公约数的辗转相除法

用辗转相除法我一般喜欢用递归总之就是简洁,特别适合算法竞赛

2ed352157cad452c89b003c7a5585692.png

注意这里的X Y和上面的X Y的大小顺序是不一样的,只需要记住用大除小

原代码:

//家人们,辗转相除法必会求最大公约数
//这边推荐和递归一起用
int dgyq(int x,int y){
    if(y>x){                               //常规交换
        int temp=x;
        x=y;
        y=temp;
    }
    return x?dgyq(y%x,x):y;               //家人们结束了
}
int main(int argc, const char * argv[]) {
    int a,b;
    scanf("%d%d",&a,&b);
    printf("最大公约数为%d\n",dgyq(a,b));
}

好了,今天的分享就到这里结束了,欢迎大家留言积极讨论,我们一起进步,一起加油👏

  • 24
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值