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

发布时间:2024年01月07日

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

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


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));
}

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

文章来源:https://blog.csdn.net/2301_81856296/article/details/135416241
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。