最大公约数(欧几里得算法)

最大公约数定理(欧几里得定理):gcd(a,b) = gcd(b,a mod b) (a>b 且a mod b 不为0)
最小公倍数:lcm(a,b) = a/gcd(a,b)*b;
证明:
  1.   由于a>b,可以得到如下结论: a可以表示为 a = kb + r,则r = a mod b
        不妨设 d是a,b的一个 公约数 则有 d|a,d|b(d可被约a和b约分),而r = a - kb,因此d|r
        因此d也是(b,a mod b)的 公约数
        上面证明可得,所有(a,b)的公约数都是(b, a mod b)的公约数。
        现假设a > b,a mod b = r,那么有 a = nb + r。
        假设m是(b, r)的公约数,那么有m是b,r,a = nb + r的公约数,即m也是(a,b)的公约数
        上面证明可得,所有(b, a mod b)的公约数都是(a,b)的公约数
        因此(a,b)和(b,a mod b)的公约数完全一致,因而其最大公约数也必然相等。
        终止条件:(a, a mod b)->.....(a,r)->( r, 0)直到a刚好可以整除r时,再执行一步,可得到r的值,即为输入的a值,此时b值为0。 
        代码
        int gcd(int a,int b){
             int temp;
             if(a<b)
                 return gcd(b,a);
             while(b!=0){
                temp = b;
                b = a % b;
                a = b;
            }
            return a;
        }
   2. 最小公倍数,lcm(a,b)由唯一分解定理得到。
       a = p1e1 p2e2 ....pr er(其中ei都是次方,质数分解)
       b = p1f1 p2f2 ......pr fr(同上)
      gcd(a,b) = p1 min{e1,f1} p2 min{e2,f2} ........ pr min{er,fr}(min{ei,fi}均为次方数)
      lcm(a,b) = p1 max{e1,f1} p2 max{e2,f2} ....... pr max{er,fr}(max{ei,fi}均为次方数)
      gcd(a,b) * lcm(a,b) = a * b
      因此,可以先求最大公约数,再求最小公倍数。
      代码为
      a/gcd(a,b) * b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值