公约数相关算法

公约数定义

公约数,亦称“公因数”。它是一个能被若干个整数同时均整除的整数。如果一个整数同时是几个整数的约数,称这个整数为它们的“公约数”;公约数中最大的称为最大公约数。对任意的若干个正整数,1总是它们的公因数。

问题背景

  1. 求两个数的最大公约数
  2. 求多个数的最大公约数
  3. 求多个数的公约数

问题2、3其实质上也就是问题1的转化。
求2可以先求出其中两个数的最大公约数,将这个最大公约数同第三个数接着求其二者最大公约数,依次求解,即可得到多个数的最大公约数。
求3可以求出2,其最大公约数的公约数即是问题的解。

算法

辗转相减法

求a、b的最大公约数
当a>b时,若a中含有与b相同的最大公约数,那么a-b中也有与b相同的最大公约数。
当a<b时,若a中含有与b相同的最大公约数,那么b-a中也有与a相同的最大公约数。
直到a=b为止,此时a或b就是最大公约数。

  public int Gcd(int a,int b){
        if(a<0||b<0) return -1;
        if(a==b) return a;
        else if(a>b)  return Gcd(a-b,b);
        else return Gcd(a,b-a);
    }

辗转相除法

求a、b的最大公约数
对正整数a,b进行连续的求余运算,直到余数为0为止,此时非0的除数就是最大公约数。
即Gcd(a,b)=Gcd(b,r) r=a%b
例如50和15的最大公约数Gcd(50,15)=Gcd(15,5)=Gcd(5,0)

public  int Gcd1(int a,int b){
        if(a<0||b<0) return -1;
        int r=0;
        while (a%b!=0){
            r=a%b;
            a=b;
            b=r;
        }
        return b;
    }```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值