• 【数论】扩展欧几里得定理


    我们要解决一个这样的问题:(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) 为任意整数。

  • 相关阅读:
    基于蓝牙的安卓客户端开发
    在word文档中添加上角标和下角标
    vs2008打开类视图,看不到类的解决方法
    容器vector 迭代器iterator 应用
    next_permutation()
    pair运用
    vector学习
    容器之vector
    指针 * &
    派生类中的构造函数和析构函数
  • 原文地址:https://www.cnblogs.com/chzhc-/p/13541993.html
Copyright © 2020-2023  润新知