辗转相除法(欧几里得算法)求 最大公约数与最小公倍数+推论与证明。

首先我们规定:0不参与公约数和公倍数的讨论

先来讨论最大公约数:

最大公约数求法:两个数的所有公共质数相乘. 考虑三个问题。

  1. 为什么是公共的:公共代表这个数可以被两个数都整除
  2. 为什么是质数:合数一定能分解出质数,若为公共合数,则代表并非最简。
  3. 为什么两个数分别除以最大公因数后满足互质:因为抽掉了公共质因子。

由3得: 两个数相乘=这两个数的最大公约数*最小公倍数

因为最大公约数两个数的公共质数相乘, 但最小公倍数是两个数相乘后除以公共质数
(第三点),因此互补。

证明:在这里插入图片描述

结论:
1、最大公因数是两个数的公共质数相乘。
2、最小公倍数是两个数相乘后除以公共质数
3、两个数相乘=最大公因数*最小公倍数。


接下来是经典的“辗转相除法(欧几里得算法)”求最大公约数与最小公倍数的代码。

辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。例如,252 和 105 的最大公约数是 21;因为 252 − 105 = 21 × (12 − 5) = 147 ,所以 147 和 105 的最大公约数也是 21。

在这个过程中,较大的数缩小了,所以继续进行同样的计算可以不断缩小这两个数直至其中一个变成零。

这时,所剩下的还没有变成零的数就是两数的最大公约数。



#include<stdio.h>
int main() {
    
    
	int x, y, z, m, n;
	printf("请输入两个数:");
	scanf("%d%d", &x, &y);
	m = x, n = y;
	while (y != 0) {
    
    
		z = x%y;
		x = y;
		y = z;
	}
	printf("最大公约数是: %d\n", x);
	printf("最小公倍数是: %d\n", m*n / x);
	return 0;
}

欢迎在评论区留言。 如果这篇文章对你产生了帮助,就请给博主一个赞吧!大家的点赞是我创作的最大动力!

猜你喜欢

转载自blog.csdn.net/weixin_43899069/article/details/108121198
今日推荐