• 辗转相除法求最大公约数


    假设有两个数x和y,存在一个最大公约数z=(x,y),即x和y都有公因数z,
    那么x一定能被z整除,y也一定能被z整除,所以x和y的线性组合mx±ny也一定能被z整除。(m和n可取任意整数)

    对于辗转相除法来说,思路就是:
    若x>y,设x/y=n余c,
    则x能表示成x=ny+c的形式,
    将ny移到左边就是x-ny=c,由于一般形式的mx±ny能被z整除,
    所以等号左边的x-ny(作为mx±ny的一个特例)就能被z整除,
    即x除y的余数c也能被z整除。
    ————————————————
    版权声明:本文为CSDN博主「hello_woo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/hello_woo/article/details/79293235

    . 辗转相除法是求最大公约数的一种方法。它的具体做法是:用较小数除较大数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。这个和更相减损术有着异曲同工之处。
    ————————————————
    版权声明:本文为CSDN博主「Demo龙」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_59708493/article/details/121615282

     1 int gcd(int a, int b) 
     2 {
     3     int t;
     4      while(1) 
     5     {
     6           t=a%b;
     7           if(t==0)
     8           {
     9               return b;//如果a%b=0;b就是要求的最大公约数
    10           }
    11           a=b;//辗转替换
    12           b=t;
    13      }
    14      return a;
    15 }
    1 //递归简化代码
    2 int gcd(int a, int b) 
    3 {
    4     return a%b==0?b:gcd(b,a%b);//理解辗转相除法原理后可以轻易理解,辗转相除本身就是一种递归;
    5 }
  • 相关阅读:
    Codeforces 1163E 高斯消元 + dfs
    Codeforces 1159E 拓扑排序
    Codeforces 631E 斜率优化
    Codeforces 1167F 计算贡献
    Codeforces 1167E 尺取法
    Gym 102007I 二分 网络流
    Codeforces 319C DP 斜率优化
    Codeforces 1163D DP + KMP
    Comet OJ
    Vue 的响应式原理中 Object.defineProperty 有什么缺陷?为什么在 Vue3.0 采用了 Proxy,抛弃了 Object.defineProperty?
  • 原文地址:https://www.cnblogs.com/xhu218/p/16281586.html
Copyright © 2020-2023  润新知