zoukankan      html  css  js  c++  java
  • 拓展欧几里得算法

    如果还不太熟欧几里得算法戳这里

    既然被称为拓展欧几里得算法
    它和(a,b,a)%(b)脱不了干系
    首先我们设方程(ax+by=gcd(a,b))

    若已知道了(x1,y1满足bx1+(a)%(b)y2=gcd(a,b))的一组解

    要求(ax+by=gcd(a,b))的一组解

    (a)%(b=a-(a/b)*b)

    则可列出式子:
    (bx1+(a-(a/b)*b)y1=gcd(a,b))

    开始整理:
    (bx1+ay1-(a/b)*b*y1=gcd(a,b))

    提出(a,b):
    (ay1+b(x1-a/b*y1)=gcd(a,b))

    (ax+by=gcd(a,b))

    对比发现当(x)(y1,y)(x1-a/b*y1)时方程成立!

    于是就可以快乐地赋值求解了
    然后当(b==0)时方程变为了(ax+0y=gcd(a,b)=a)
    则此时的解为(x=1,y=0)
    这样子再递归回溯就可以解出(ax+by=gcd(a,b))的解了
    代码长这样↓

    int exgcd(int a,int b){
    	if(b==0){
    		x1=1,y1=0;
    		return a;
    	}
    	return exgcd(b,a%b);
    	int x=y1,y=x1-a/b*y1;
    	x1=x,y1=y;
    }
    

    最后的(x1)(y1)就是目标方程的一组特解了

    结语

    这个拓展欧几里得算法从欧几里得算法入手
    可以解决一些逆元相关的问题(之后会说,会放链接的)
    还是很普遍的,知识较为基础,望大家掌握

    Reality&Imagine
  • 相关阅读:
    (转载)关于一些对location认识的误区
    Python内置数据结构--列表
    Maven
    Python基础语法
    安装ipython和jupyter
    Python环境安装
    Java多线程
    SpringMVC集成springfox-swagger2自动生成接口文档
    SpringMVC拦截器
    SpringMVC异常处理器
  • 原文地址:https://www.cnblogs.com/yang-RA-NOI/p/13436345.html
Copyright © 2011-2022 走看看