zoukankan      html  css  js  c++  java
  • 『数论』求最大公因数

    //#define fre yes
    
    #include <cstdio>
    
    int gcd(int a, int b) {
        if(b != 0) gcd(b, a % b);
        else return a;
    }
    

    谈论数论不废话 ----- 辗转相除法求gcd

    以上代码的时间复杂度为 (O(log n))

    证明,为何 (gcd(b, a mod b) = gcd(a, b))

    (g = gcd(a, b)) 那么一定有 (a = xg , b = yg) 我们又可以将 a 用 b 来表示,(任何数都可以用另外一个数表示) (a = kb + r)(k)(a / b) 的整数部分,(r)(a / b) 的余数部分 也就是 (a mod b)),转化一下(r = a - kb) 那么将上面的 a, b 代入,也就变成了 (r = xg - kyg = (x - ky)g) 此时的 g 也是 r 的因数了,又因为 (r)(a mod b) 所以 (gcd(a, b) = gcd(b, a mod b)) 证毕

  • 相关阅读:
    css clear
    设置 系统软件
    Canvas 生成 bitmap
    HashTable
    JSF
    android 自定义 锁屏
    java socket
    php mysql 配置
    mysql 启动方法
    jQuery 表格
  • 原文地址:https://www.cnblogs.com/Nicoppa/p/11712072.html
Copyright © 2011-2022 走看看