zoukankan      html  css  js  c++  java
  • 欧几里得算法

    欧几里得算法(辗转相除)

    gcd(a,b),用于计算a,b的最大公约数

    gcd(a, b)  = g(b, a%b)

    证明(反证法):

        设 r=a%b , c=gcd(a,b)

        则 a=xc , b=yc , 其中x , y互质

        r=a%b=a-pb=xc-pyc=(x-py)c

        因为gcd(a,b) = gcd(b,a%b)

        b = yc;

        a%b = r = (x-py)c

        所以 y 与 (x-py) 互质

        反证法:

          假设 y 与 (x-py) 不互质

                    设 y = nk , x-py = mk , (k>1) 不互质有大于1的公因子

                    将 y 带入可得

                    x-pnk = mk

                    x = (pn + m)k

                    则 a = xc = (pn+m)kc , b = yc = nkc

                    那么此时 a 与 b 的最大公约数为 kc 不为 k

                    与原命题矛盾,则 y 与 x-py 互质

    所以 gcd(a, b)  = gcd(b, a%b)成立

    代码实现用递归的方法,当a%b等于0时退出,返回b

    代码:

     int gcd(int a,int b)
    {
        return b?gcd(b,a%b):a;
    }
  • 相关阅读:
    AdvComboBox
    带有可选选项的输入文本框(组合框)
    使用JavaScript为整个网站创建通用的Twitter按钮
    高速绘图控件
    Outlook样式分组列表控件
    CComboBox的禁用项目
    一个自定义的WPF滑块按钮
    23个设计模式
    MVC执行流程
    SQL注入面试
  • 原文地址:https://www.cnblogs.com/1998LJY/p/10680184.html
Copyright © 2011-2022 走看看