C语言求两个数的最大公约数、最小公倍数(三种方法)

2024-04-30 10:18

本文主要是介绍C语言求两个数的最大公约数、最小公倍数(三种方法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最大公约数:也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。(如果数a能被数b整除,a就叫做b的倍数,b就叫做a的约数)

最小公倍数:两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。

以两个整数为例,我们知道最小公倍数=两整数乘积 / 最大公约数。那么在求出最大公约数的基础下,利用该公式便可求出最小公倍数。

那么如何求两个数的最大公约数,最小公倍数呢?

法一:

我们通常是先比较两个数的大小,找到较小的一个。然后让这两个数都对 以较小数为首的递减序列(增量为-1) 求余,如果两个数同时都能被其整除,则找到最大公约数。

int main()
{int a = 17, b = 35;int n, i;//找a,b中较小的数if (a > b){n = b;}else{n = a;}for ( i = n; i > 0; i--){if (a%i == 0 && b%i == 0){printf("最大公约数为%d\n", i);printf("最小公倍数为%d\n", (a*b) / i);break;}}system("pause");return 0;
}

法二(辗转相减法):

辗转相减法:不断地对两个数做减法,以此求出最大公约数。即用大数减小数,将所得结果保存到大数中;再用此时的大数减小数,将结果保存到大数中,如此重复,直到最后两数相等,便求出了最大公约数。

以求a = 24和b = 36的最大公约数为例,具体求解思路如下:

1. b=b-a=36-24=12;

2. a=a-b=24-12=12;

3.a=b = 12(此时两数相等) ---> 最大公约数为12

代码实现如下:

//辗转相减法求最大公约数,最小公倍数
int main()
{int a = 28, b = 40;int mul = a*b;while (a != b){if (a > b){a = a - b;}else if (a < b){b = b - a;}}printf("最大公约数为%d\n", a);printf("最小公倍数为%d\n", mul/a);system("pause");return 0;
}

法三(辗转相除法):

辗转相除法是求最大公约数的一种方法,其具体求解思路如下:

两数相除(不论大小),再用除数除以出现的余数(第一余数),再用第一余数除以出现的余数(第二余数),如此反复,直到最后余数是0为止,那么最后的除数便是这两个数的最大公约数。

以求24和50的最大公约数为例,具体求解步骤如下:

1.  24%50=24(余数不等于0)

2. 50%24=26(余数不等于0)

3. 24%26=24(余数不等于0)

4. 26%24=2(余数不等于0)

5.24%2=0(余数等于0) --->最大公约数为此时的除数2

代码实现如下:

#include <stdio.h>
#include <windows.h>
int main()
{int a = 24, b = 50;int tmp = 0;int mul = a*b;while (tmp = a%b){a = b;b = tmp;}printf("最大公约数为%d\n", b);printf("最小公倍数为%d\n", mul / b);system("pause");return 0;
}

 

 

 

这篇关于C语言求两个数的最大公约数、最小公倍数(三种方法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/948594

相关文章

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

浅谈主机加固,六种有效的主机加固方法

在数字化时代,数据的价值不言而喻,但随之而来的安全威胁也日益严峻。从勒索病毒到内部泄露,企业的数据安全面临着前所未有的挑战。为了应对这些挑战,一种全新的主机加固解决方案应运而生。 MCK主机加固解决方案,采用先进的安全容器中间件技术,构建起一套内核级的纵深立体防护体系。这一体系突破了传统安全防护的局限,即使在管理员权限被恶意利用的情况下,也能确保服务器的安全稳定运行。 普适主机加固措施:

webm怎么转换成mp4?这几种方法超多人在用!

webm怎么转换成mp4?WebM作为一种新兴的视频编码格式,近年来逐渐进入大众视野,其背后承载着诸多优势,但同时也伴随着不容忽视的局限性,首要挑战在于其兼容性边界,尽管WebM已广泛适应于众多网站与软件平台,但在特定应用环境或老旧设备上,其兼容难题依旧凸显,为用户体验带来不便,再者,WebM格式的非普适性也体现在编辑流程上,由于它并非行业内的通用标准,编辑过程中可能会遭遇格式不兼容的障碍,导致操

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

poj 1287 Networking(prim or kruscal最小生成树)

题意给你点与点间距离,求最小生成树。 注意点是,两点之间可能有不同的路,输入的时候选择最小的,和之前有道最短路WA的题目类似。 prim代码: #include<stdio.h>const int MaxN = 51;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int P;int prim(){bool vis[MaxN];

poj 2349 Arctic Network uva 10369(prim or kruscal最小生成树)

题目很麻烦,因为不熟悉最小生成树的算法调试了好久。 感觉网上的题目解释都没说得很清楚,不适合新手。自己写一个。 题意:给你点的坐标,然后两点间可以有两种方式来通信:第一种是卫星通信,第二种是无线电通信。 卫星通信:任何两个有卫星频道的点间都可以直接建立连接,与点间的距离无关; 无线电通信:两个点之间的距离不能超过D,无线电收发器的功率越大,D越大,越昂贵。 计算无线电收发器D

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

poj 1734 (floyd求最小环并打印路径)

题意: 求图中的一个最小环,并打印路径。 解析: ans 保存最小环长度。 一直wa,最后终于找到原因,inf开太大爆掉了。。。 虽然0x3f3f3f3f用memset好用,但是还是有局限性。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#incl

hdu 1102 uva 10397(最小生成树prim)

hdu 1102: 题意: 给一个邻接矩阵,给一些村庄间已经修的路,问最小生成树。 解析: 把已经修的路的权值改为0,套个prim()。 注意prim 最外层循坏为n-1。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstri