【C语言】一篇博客带你弄懂最大公约数和最小公倍数

这篇具有很好参考价值的文章主要介绍了【C语言】一篇博客带你弄懂最大公约数和最小公倍数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

我们在C语言的学习中,经常会遇到这样一些数学题目,良好掌握这些题目有利于我们理解和学习C语言,话不多说,直接进入主题最大公约数和最小公倍数,C语言,c语言,算法

什么是最大公约数和最小公倍数

最大公约数:

首先我们举个例子,比如12 和16,12的约数有(1,2 ,3,4,6,12),16的约数有(1,2,4,8,16)公约数就是两个数共同的约数,(1,2,4)而公约数中最大的就是最大公约数。

最小公倍数

我们同样举个例子,比如12和16,我们将163=48,124=48,这是两个数第一次有倍数相等关系,就叫48是最小公倍数

最大公约数和最小公倍数,C语言,c语言,算法

最大公约数与最小公倍数的公式

最大公约数 —— Greatest Common Divisor(GCD)
最小公倍数 —— Leatest Common Multiple(LCM)

假设a和b是我们已知的数,那么 就存在一个公式。
公式展示 最大公约数和最小公倍数,C语言,c语言,算法

a ∗ b = G C D ∗ L C M a*b=GCD*LCM ab=GCDLCM

这与我们的路程公式很相似,我们可以类比记忆,路程=速度*时间
所以我们只要求出其中的一个就行,求出GCD 就可以通过公式求出LCM,
求出LCM就可以通过公式求出GCD。

求最大公约数方法

方法一:暴力穷举法

最大公约数和最小公倍数,C语言,c语言,算法

细节讲解: 我们知道最大公约数是约数中能同时整除两数,并且是最先整除的,那我们就可以一个一个试。我们可以将l两个数中小的那个赋给tmp,为什么呢?因为我们找最大公倍数时最大也不会超过a,b两个数中最小的那个
比如16 和12 ,我们肯定是从12往下找,而不是还要在16~12之间浪费时间。 我们来看看代码

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int tmp = a > b ? b : a;
	while (1)
	{
		if (a % tmp == 0 && b % tmp == 0)
		{
			printf("最大公约数是%d", tmp);
			break;
		}
		else
		tmp--;
	}
	return 0;
}

最大公约数和最小公倍数,C语言,c语言,算法最大公约数和最小公倍数,C语言,c语言,算法

方法二:辗转相除法

在数学中,辗转相除法,又称欧几里得算法(Euclidean algorithm),是求取最大公约数的一种算法。辗转相除法首次出现于欧几里得的《几何原本》中的第Ⅶ卷,书中的命题ⅰ和命题ⅱ所描述的就是辗转相除法,而在中国,辗转相除法最早出现在《九章算法》中。可以说这是一个非常经典的方法

我们来看流程图

最大公约数和最小公倍数,C语言,c语言,算法

解析:如果我们有a,b a = 24 b = 18 ,我们先让 24 % 18 = 6 ,
接下来我们让 18 % 6 = 0 ;刚好符合我们流程图中蓝色框框的条件,这样就能确定 6 就是最大公倍数。如果是18 % 24 呢?最大公约数和最小公倍数,C语言,c语言,算法

最大公约数和最小公倍数,C语言,c语言,算法

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	while (1)
	{
		int c = a % b;
		if (0 == a % b)
		{
			printf("%d就是最大公约数", b);
			break;
		}
		else
		{
			a = b ; 
			b = c;
		}
	}
	return 0;
}

最大公约数和最小公倍数,C语言,c语言,算法

方法三:更相减损术

《九章算术》是中国古代的数学专著,其中的“更相减损术”可以用来求两个数的最大公约数最大公约数和最小公倍数,C语言,c语言,算法

流程图:
最大公约数和最小公倍数,C语言,c语言,算法

用更相减损术求98与63的最大公约数。

最大公约数和最小公倍数,C语言,c语言,算法

我们只要跟着流程图走,然后一直改变 a 和 b 的值然后直至a b 相等就行,a b 相等时的那个数就是最大公倍数,下面给出代码

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	while (1)
	{
		if (a == b)
		{
			printf("最大公倍数是%d", a);
			break; 
		}
		if (a > b)
		{
			a = a - b;
		}
		if (b > a)
		{
			b = b - a;
		}
	}
	return 0;
}

最大公约数和最小公倍数,C语言,c语言,算法

求最小公倍数的方法

方法一:公式法

a ∗ b = G C D ∗ L C M a*b=GCD*LCM ab=GCDLCM

所以我们只要求出其中的一个就行,求出GCD 就可以通过公式求出LCM,
我们上面已经介绍了三种求GCD的方法,直接用公式也是可以的。最大公约数和最小公倍数,C语言,c语言,算法

方法二:暴力穷举法

我们知道最小公倍数就是能够同时整除我们已知的两个数的数,而且我们可以从两个数中更大的开始,比如说求45和30的最小公倍数。
我们肯定是从45 往上找。
由于方法比较暴力我们就直接看代码吧!最大公约数和最小公倍数,C语言,c语言,算法

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int c = a > b ? a : b;
	while (1)
	{
		if (0 == c % a && 0 == c % b)
		{
			printf("最小公倍数是%d", c);
			break;
		}
		
		c++;
	}
	return 0;
}

最大公约数和最小公倍数,C语言,c语言,算法

方法三:叠乘法

方法讲解:
已知两个数的公倍数一定与这两个数存在倍数关系,那么求解最小公倍数我们就可以将其中一个数依次扩大1倍、2倍、3倍……直到出现第一个扩大n倍的数可以同时整除这两个数,这个数就是最小公倍数。

计算36和270的最小公倍数

我们直接给出代码

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	
	int i = 1;
	while (a * i % b != 0)
	{
		i++;
	}
	printf("最小公倍数是%d", a * i);
	return 0;

}

最大公约数和最小公倍数,C语言,c语言,算法最大公约数和最小公倍数,C语言,c语言,算法

最后总结

通过这篇博客我们知道了求最大公约数和最小公倍数的许多方法,当然不止这些方法,但是我觉得这些应该够用一段时间了。我是一个博客新手,本文若是有笔误之处,请大家多多指出。最后写博客是一件很辛苦但是很有成就感的一件事情。

这篇文章到这里就结束了,如果有帮到你就请点个赞吧。我的博客是不添加水印的,大家也可以用里面的图片。最后就麻烦用你的小手点个赞吧,哈哈Thanks♪(・ω・)ノ最大公约数和最小公倍数,C语言,c语言,算法文章来源地址https://www.toymoban.com/news/detail-761810.html

到了这里,关于【C语言】一篇博客带你弄懂最大公约数和最小公倍数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言】辗转相除法求最大公约数(详解)

    辗转相除法(又称欧几里德算法)是一种用于求解两个整数的最大公约数的方法。本文将使用C语言来实现辗转相除法,并对其原理进行解释。 辗转相除法的原理非常简单。假设有两个整数a和b,其中a b。通过对a除以b求余数,得到余数r1。然后把b除以r1求余数,得到余数r2。如

    2024年02月07日
    浏览(34)
  • 【C语言】两个整数最大公约数和最小公倍数

    输入两个整数,求这两个数的最大公约数和最小公倍数。 第一种求法(辗转相除法)这个方法代码较洁简,我也比较推荐就是刚开始有点比较难了解。 首先,来看看怎么求最大公约数,求最大公约数需要用到 欧几里得算法 ,也称为辗转相除法。算法就是用两数中较大的数

    2024年02月04日
    浏览(31)
  • C语言经典算法之Euclidean算法求最大公约数

    目录 前言 A.建议 B.简介 一 代码实现 二 时空复杂度 A.循环实现 a.时间复杂度(Time Complexity): b.空间复杂度(Space Complexity): B.递归实现 a.时间复杂度(Time Complexity): b.空间复杂度(Space Complexity): 三 优缺点 A.循环实现 a.优点: b.缺点: c.总结: B.递归实现 a.优点:

    2024年03月26日
    浏览(42)
  • C语言入门——求最大公约数(2种方法超详细)

    基本介绍: 最大公约数(greatest common divisor,简写为 gcd ;或highest common factor,简写为hcf),指某几个整数共有因子中最大的一个。 最大公约数 能够整除一个整数的整数称为其的约数(如5是10约数); 能够被一个整数整除的整数称为其的倍数(如10是5的倍数); 如果一个数既

    2024年02月08日
    浏览(85)
  • 【c语言】—求最大公约数和最小公倍数多种方法

    目录 一.求最大公约数 1.枚举法求最大公约数 2.辗转相除法 二.求最小公倍数 1.枚举法求最小公倍数 2.简易法 3.公式法 思路:先求两个数中的最小值,最大公约数不可能大于两个数的最小数 比如6和18,最大公约数就是6 再如3和9,最大公约数就是3 然后再从1开始循环遍历到最小

    2024年02月08日
    浏览(41)
  • C语言:给定两个数,求这两个数的最大公约数(新思路:辗转相除法)

    从键盘 输入两个数 , 求 这 两个数 的 最大公约数 。                       =========================================================================                         (一). 生成 相关变量 ; 从键盘 输入两个数 ; 再 使用 三目操作符(条件操作符) 找出 较小值 。        

    2024年02月09日
    浏览(30)
  • C语言——输入两个正整数 m 和 n。求其最大公约数和最小公倍数。

    1、首先,程序通过printf函数提示用户输入两个正整数m和n,然后使用scanf函数接收用户的输入并将值分别存储到变量m和n中。 2、接下来,程序进入一个for循环,从1开始遍历直至i等于较小的数(m或n),检查当前数值i是否能同时整除m和n。如果i既能被m整除又能被n整除(即满足

    2024年02月03日
    浏览(28)
  • C语言——输入两个正整数m和n,求其最大公约数和最小公倍数

    目录 1.最大公约数求法 1.1辗转相除法 1.2相减法 2.最小公倍数求法 3.代码实现 4.结果展示 1.1辗转相除法 设有两整数a和b: a%b得余数c 若c==0,则b即为两数的最大公约数 若c!=0,则a=b,b=c,再回去执行第一步。 例如:求27和15的最大公约数过程为: 27÷15 余12 15÷12 余3 12÷3 余0 因

    2024年02月01日
    浏览(28)
  • 【约数】求最大公约数——递归

    请使用递归算法计算正整数n和m的最大公约数GCD(n,m)。 G C D ( n , m ) = { = m , 当 m = n 且 n m o d m = 0 = G C D ( m , n ) , 当 n m 时 = G C D ( m , n m o d    m ) , 其他 GCD(n,m)=left{begin{matrix} =m,当 m=n 且 n mod m =0\\\\ =GCD(m,n),当nm时\\\\ =GCD(m,n mod m),其他 end{matrix}right. GC D ( n , m ) = ⎩ ⎨ ⎧ ​ = m

    2024年02月03日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包