求两个数的最大公因数 四种

方法有很多(各有各的优点)  静下心看

第一种  穷举法

解释:如果两个数能够整除 则最大公因数是那个小的数  例如  20和5   20/5==4  则最大公因数为5

若不能整除  则最大公因数是   比小数小的(肯定是在小数上找)   且能被两个数整除的

​
int xxx(int a, int b)   //定义找最大公因数的函数
{
	int i;
	int min = a < b ? a : b;     //在小数上找 
	for (i = min; i >= 1; i--)   //先从小数的最大值开始  因为是最大公因数
	{
		if (a % i == 0 && b % i == 0)   //被两个数同时整除
	}
	return i;     //返回i的值 
}

​

第二种  质数分解法

将所有的公有小公因数相乘 就是 最大公因数

  • 求  20和 40 的最大公因数。
    • 先对 20 进行质因数分解:20=2*2*5
    • 再对 40进行质因数分解:40=2*2*2*5
    • 公有的质因数是 2 和 5,其中 2 出现两次,5 出现一次,所以最大公因数为2*2*5=20
    • 代码实现   还不能理解的可以带入是数据验证 这样好理解
  • int xxx(int a, int b)   //定义函数
    {
        int result = 1;   //定义一个存放结果的变量
        for (int i = 2; i <= a && i <= b; i++)    也能从 1开始 不过从1开始的话结果不变  反而增加计算量
        {
            while (a % i == 0 && b % i == 0)     //直到找到公因数
            {
                result *= i;
                a /= i;
                b /= i;
                i = 1;   //找到之后 又从1开始找 
            }
        }
        return result;  //返回
    }

    第三种 辗转相除法

  • 辗转相除法,又称欧几里得算法,其基本原理是:用较大数除以较小数得到商和余数,再用除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公因数。

  • // 函数用于求两个数的最大公因数,使用辗转相除法
    int xxx(int a, int b) {
        int temp;
        while (b!= 0) {
            temp = b;
            b = a % b;
            a = temp;
        }
        return a;
    }

    第四种  更相减损术

  • 更相减损术的原理是:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止,此时这个相等的数就是最大公因数。

    // 函数用于求两个数的最大公因数,使用更相减损术
    int xxx(int a, int b) {
        while (a!= b) {
            if (a > b) {
                a = a - b;
            } else {
                b = b - a;
            }
        }
        return a;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值