最大公约数(GCD)

本文详细介绍了最大公约数的概念及其三种求解方法:枚举因数、构造法和欧几里得算法。欧几里得算法是最常用且效率较高的方法,通过不断取模递归,直至余数为0,最后的非零余数即为最大公约数。
摘要由CSDN通过智能技术生成

本篇博客主要介绍最大公约数及其求解方法。

最大公约数

  首先,最大公约数是什么?

  按照定义,最大公约数是两个数的公共因子中最大的一个。所以两个数最大公因数一定是确定的,同时最大公因数只能对于两个以上的数存在。

求解

1.枚举因数

  按照定义,我们可以知道,两个数的最大公因数一定是这两个数的公因数,所以很容易想到,当我们将每一个公因子求出来时,其中的最大因子一定是最大公因数。

  由此可以得到一个朴素算法:对于 n n n, m m m两个数,枚举小于等于 n \sqrt{n} n 的每一个数,当这个数是 n n n的因子时,判断这个数是不是 m m m的因子,如果是,那么记录该数,并判断它是否是已经找到的数中的最大值。

  当然,可以选择性地只枚举小于等于 min ⁡ ( n , m ) \sqrt{\min(n , m)} min(n,m) 的数,但是实际优化程度不大,仅在 n , m n , m n,m相差较大时才有明显效果。

int gcd(int n, int m)
{
   
	int maxn = 1;
	for(int i=2; i<sqrt(n)/*sqrt(min(n , m))*/; i++)
	{
   
		if(n%i==0)
		{
   
			if(m%i==0)
			{
   
				if(maxn < i)
					maxn = i;
			}
		}
	}
	return maxn;
}
2.构造

  上述方法明显多扫描了许多数字,所以我们可以考虑构造最大公因数。

  既然最大公因数是两数的最大的公因数,那么最大公因数一定包含两数所有的公共质因子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值