• 【算法•日更•第五十六期】扩展欧几里得算法


    ▎裴蜀定理

      这个定理很简洁,就是关于x,y(都是整数)的不定方程在下面的情况下:

      

      必定有解。

      这只是个前置知识,就不证明了(主要是小编太菜)

    ▎不定方程

      考虑方程ax+by=c的解的情况:

    • 若c=gcd(a,b),那么依照裴蜀定理有解;
    • 若c=k*gcd(a,b),先两边同除k,就会转化成标准形式,有解;
    • 若c与gcd(a,b)互质,那么无解;

      所以问题就是:

      

      如何解决,只要解决了这个问题,所有解的情况就解决了。

    ▎问题解决

      现在我们考虑怎么让这个问题更简单,思考这样一个问题,已知:

      

      的解(x,y),那么怎么推出:

      

      的解(x‘,y’)呢?

      先抛出结论:

      下面是证明过程:

      

      知道了这个东西之后,我们就可以在算完

      

      的时候很快推出:

      

      这样可以层层递归下去,直到y=0,那么x=1,y=0的情况下就是a+0=gcd(a,0),此条件成立,那么再回溯回去就可以了。

    ▎代码实现

      感觉像极了辗转相除法。

    1 pair<int,int> exgcd(int a,int b)
    2 {
    3         if(b==0) return pair(1,0);
    4         pair<int,int> sum=exgcd(b,a%b);
    5         return pair<int,int>(y,x-a/b*y);
    6 }
  • 相关阅读:
    android 网络
    java 软引用,弱引用,强引用
    android 定时, 延时 任务
    android 不失真 显示 超高清 图片 长图
    android viewHolder static 静态
    工作中怎么解决bug
    chkconfig命令
    chkconfig命令
    chkconfig命令
    linux安装 pip和setuptools
  • 原文地址:https://www.cnblogs.com/TFLS-gzr/p/11395285.html
Copyright © 2020-2023  润新知