前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >萌新小白必做题(1):找两数间的最大公约数与最小公倍数

萌新小白必做题(1):找两数间的最大公约数与最小公倍数

作者头像
对编程一片赤诚的小吴
发布2024-01-23 15:26:32
1280
发布2024-01-23 15:26:32
举报

1.最大公约数方法

1.性质法(更相减损法)

如果a>b,则a和b与a-b和b的最大公约数相同,即Gcd (a, b) = Gcd (a-b, b) 性质2 如果b>a,则a和b与a和b-a的最大公约数相同,即Gcd (a, b) = Gcd (a, b-a) 性质3 如果a=b,则a和b的最大公约数与a值和b值相同,即Gcd (a, b) = a = b

步骤:

1.判断a是否大于b,如果成立则将a-b的值赋给a,求a-b,反之如果b大于a,则将b-a的值赋给b,往复循环,直到a的值等于b时,两者中的任意一值就是它们的最大公约数。

代码语言:javascript
复制
#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	while ((a - b) != 0)
	{
		if (a > b)
		{
			a = a - b;
		}
		else
		{
			b = b - a;
		}
	}
	printf("%d %d\n", a, b);
	return 0;
}

方法2 暴力法

根据最大公约数指的是两个整数公共的最大因数的概念,我们可以从两者中较小的值开始寻找,找到能够同时整除俩数的值就是最大共约数。

步骤:

1.先找出两者中最小值,从它开始递减循环,直到找到能够同时整除两个数的值(不能为0)就是它的最大公约数。

代码语言:javascript
复制
#define MAX(x,y) ((x)>(y)?(x):(y))
#define MIN(x,y) ((x)<(y)?(x):(y))
#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int n = MAX(a, b);
	int m = MIN(a, b);
	for (int i = m; i >= 1; i--)
	{
		if (n % i == 0 && m % i == 0)
		{
			printf("%d\n", i);
			break;
		}
	}
	

	return 0;
}

 方法3 辗转相除法

辗转相除法之所以有效是因为其基于一个核心原理,即:

两个数的最大公约数等于其中较小的数字和二者之间余数的最大公约数

同样找出两数之间的最大值(n)与最小值(m),将n%m的值赋给一个中间变量temp,之后将m的值赋给n,temp的值赋给m,往复循环,直到temp为0,剩下的m就是最大公约数.

代码语言:javascript
复制
#define MAX(x,y) ((x)>(y)?(x):(y))
#define MIN(x,y) ((x)<(y)?(x):(y))
#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int n = MAX(a, b);
	int m = MIN(a, b);
	int temp = 0;
	while (temp = n % m)
	{
		n = m;
		m = temp;
	}
	printf("%d\n", m);


	return 0;
}

 2.最小公倍数方法

1.枚举法

与最大公约数的暴力法一样,两个或多个 整数 公有的 倍数 叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。

步骤

找出两数的最大值,从它开始递增,直到找到能够同时除余它们为0的数就是最小公倍数。

代码语言:javascript
复制
#define MAX(x,y) ((x)>(y)?(x):(y))
#define MIN(x,y) ((x)<(y)?(x):(y))
#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int i = MAX(a, b);
	while (1)
	{
		if (i % a == 0 && i % b == 0)
		{
			break;
		}
		i++;
	}
	printf("%d\n", i);
	return 0;

}

2.性质法

由最小公倍数的性质,n(较大值)乘以一个整数,除于m(较小值)==0时,n*i(整数)就是它们的最小公倍数。

步骤

找出两数间的最大与最小值,i从1开始,如果与n相乘%m==0则停止,n*i就是它们的最小公倍数。

代码语言:javascript
复制
#define MAX(x,y) ((x)>(y)?(x):(y))
#define MIN(x,y) ((x)<(y)?(x):(y))
#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int n = MAX(a, b);
	int m = MIN(a, b);
	int i = 1;
	while (1)
	{
		if (n * i % m == 0)
		{
			break;
		}
		i++;
	}
	printf("%d\n", n*i);


	return 0;
}

方法3.找最大公约数法

性质:两个数的乘积等于这两个数的最大公约数与最小公倍数的乘积。

步骤

利用上面的任意方法找到最大公约数,用两个数的乘积除以它就得到最小公倍数。

代码语言:javascript
复制
#define MAX(x,y) ((x)>(y)?(x):(y))//宏定义
#define MIN(x,y) ((x)<(y)?(x):(y))
#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int n = MAX(a, b);
	int m = MIN(a, b);
	int z = 0;
	while (z = n % m)         //辗转相除法
	{
		n = m;
		m = z;
	}
	printf("%d", (a * b) / m);



	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.最大公约数方法
    • 1.性质法(更相减损法)
      • 方法2 暴力法
        •  方法3 辗转相除法
        •  2.最小公倍数方法
          • 1.枚举法
            • 2.性质法
              • 方法3.找最大公约数法
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档