zoukankan      html  css  js  c++  java
  • 【算法•日更•第五十六期】扩展欧几里得算法

    ▎裴蜀定理

      这个定理很简洁,就是关于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 }
  • 相关阅读:
    SpringBoot+SpringCloud
    bootstrap-thymeleaf-分页
    排序-Java
    native2ascii运用
    标准W3C盒子模型和IE盒子模型
    在既定状态下截图
    java.util.zip.ZipException: error in opening zip file
    安装 haproxy
    mysql集群
    最简redis集群配置
  • 原文地址:https://www.cnblogs.com/TFLS-gzr/p/11395285.html
Copyright © 2011-2022 走看看