zoukankan      html  css  js  c++  java
  • 【数论】扩展欧几里得定理

    我们要解决一个这样的问题:(ax+by=gcd(a, b))

    在欧几里得算法的最后一步,即 (b=0) 时,显然有一对整数 (x=1, y=0) 满足 (a imes 1+b imes 0=gcd(a, 0))

    我们假设有 (x_2, y_2) 满足 (bx_2+(a mod b)y_2=gcd(b, amod b))

    由于 (gcd(a, b)=gcd(b, amod b)),故 (ax+by=bx_2+(a mod b)y_2)

    又因为 ((a mod b) = a - leftlfloordfrac{a}{b} ight floor imes b)

    (ax+by=bx_2+(a - leftlfloordfrac{a}{b} ight floor b)y_2)

    (ax+by=bx_2+ay_2-leftlfloordfrac{a}{b} ight floor by_2)

    (ax+by=ay_2+b(x_2-leftlfloordfrac{a}{b} ight floor y_2))

    由于 (a=a, b=b),故 (x=y_2, y=x_2-leftlfloordfrac{a}{b} ight floor y_2),这样从 (x=1, y=0) 一步一步就可以推到 (ax+by=gcd(a, b)) 的解。

    对于一般的方程 (ax+by=c),当且仅当 (gcd(a,b) | c) 时有解。

    我们可以先求出 (ax+by=gcd(a, b)) 的特殊解 (x_0, y_0),然后令 (x = x_0 imes dfrac{c}{gcd(a, b)}, y=y_0 imes dfrac{c}{gcd(a, b)})

    此时 (ax+by=c)(x, y) 可能为负数,有的题目会要求 (x, y) 为正整数,我们可以把原式进行修改,变为 (ax+by+kdfrac{ab}{gcd(a, b)}-kdfrac{ab}{gcd(a, b)}=c)(a(x+kdfrac{b}{gcd(a, b)})+b(y-kdfrac{a}{gcd(a, b)})=c),即 (x=x+kdfrac{b}{gcd(a, b)}, y=y-kdfrac{a}{gcd(a, b)})(k) 为任意整数。

  • 相关阅读:
    Zend Framework入门指引
    [技巧]枚举子集的飘逸写法
    [120120]fzyz机房聚会
    [解题报告]ural 1041 Nikifor
    [转载]二分图匹配总结
    [存档]xx09210xxx2010ACMICPC竞赛总结
    [解题报告]ural 1163 Chapaev
    [总结]勿忘本心
    [解题报告]ural 1176 Hyperchannels
    [存档]xx09210xxx2011ACMICPC竞赛总结
  • 原文地址:https://www.cnblogs.com/chzhc-/p/13541993.html
Copyright © 2011-2022 走看看