zoukankan      html  css  js  c++  java
  • 数学知识 --- 扩展欧几里得算法

    裴蜀定理(Bezout定理)

    • 对于任意整数a,b,存在一对整数x,y,满足ax + by = c (充要条件是:gcd(a,b)整除c)
    • 裴蜀定理针对的是两个变量,也可以扩展到多个变量,只需要两两求最大公约数

    扩展欧几里得算法

    • 裴蜀定理是按欧几里得算法证明的,同时也给出了整数x,y的计算方法,这种计算方法叫做扩展欧几里得算法

    代码如下:

    int exgcd(int a,int b,int &x,int &y){
    	if(!b){
    		x = 1,y = 0;
    		return a;
    	}
    	int d = exgcd(b,a%b,x,y);
    	int z = x,x = y;
    	y = z - y * (a / b);
    	return d;
    }
    

    求方程ax + by = c的通解可以表示为

    • d = gcd(a,b)为一组特解,可以求得通解为:

    求解一次同余方程ax=b(modm)

    • ax - b = my, ax = b + my, ax + m(-y) = b
    • 有解条件为 gcd(a,m)|b,然后用扩展欧几里得求解即可
    • 特别的 当 b=1且 a与m互质时 则所求的x即为a的逆元
  • 相关阅读:
    每日总结
    每日总结
    每日总结
    每日总结
    每日总结
    每日总结
    每日总结
    每日总结
    Java学习哈希表2
    Java学习哈希表1
  • 原文地址:https://www.cnblogs.com/bingers/p/14072097.html
Copyright © 2011-2022 走看看