zoukankan      html  css  js  c++  java
  • 欧几里得算法与裴蜀等式

    欧几里得算法

    欧几里得算法是欧几里得(Euclid)在《几何原本》中提出的计算最大公因子的算法,被认为是最早的算法,也是人类历史上最优美的算法。

    在表述算法之前,先给出算法的理论基础:

    定理:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r)

    证明:

    若d|a且d|b,则有d|a且d|r=a-qb

    若d|b且d|r,则有d|b且d|qb+r=a

    这表明a与b的公因子集合与b与c的公因子集合相同,最大公因数肯定相同。

    算法实现:

     int gcd(int a, int b)
     {
         return b == 0 ? a : gcd(b, a % b);
    }

    这个算法也被叫做“辗转相除法”,为什么呢?

    你看啊,这个过程先右除以左,然后左除以右,再右除以左,左除以右......,就像一个人辗转反侧,所以辗转相除法就是从算法表现得到的。我们进一步分析,会发现另一个现象。

    观察输出的5是怎么得到的?

    • 5=85-2*40
    • 5=85-2*(210-2*85)=5*85-2*210
    • 5=5*(715-3*210)-2*210=5*715-17*210

    可以发现,最大公因子5可以由a,b线性表示。

    裴蜀等式

    定理:对于不全为0的整数a,b和d,方程sa+tb=d存在整数解s和t当且仅当gcd(a,b)|d。方程sa+rt=d称作裴蜀(Bezout)等式或贝祖等式。

    证明:

    (充分性)通过回代法,可知sa+tb=gcd(a,b)存在整数解s’和t’,若d=k·gcd(a,b),则ks’,kt’是方程的一组解。

    (必要性)若方程存在整数解s,t,则gcd(a,b)|sa+tb=d

    参考链接:中国大学mooc  刘铎  离散数学

  • 相关阅读:
    Programming Contest Ranking(题解)
    Alphabet Cookies
    hpu 1267 Cafeteria (01背包)
    Triangles 正多边形分割锐角三角形
    ACdream 1067:Triangles
    hdu 1253 胜利大逃亡 (代码详解)解题报告
    最短路
    POJ- 1511 Invitation Cards
    E
    HDU
  • 原文地址:https://www.cnblogs.com/lfri/p/10133045.html
Copyright © 2011-2022 走看看