///定义:
/*
扩展欧几里德算法是用来在已知a, b求解一组x,y,
使它们满足贝祖等式: ax+by = gcd(a, b) =d(解一定存在,
根据数论中的相关定理)。扩展欧几里德常用在求解模线性方程及
方程组中。
*/
/*
扩展欧几里德算法是用来在已知a, b求解一组x,y,
使它们满足贝祖等式: ax+by = gcd(a, b) =d(解一定存在,
根据数论中的相关定理)。扩展欧几里德常用在求解模线性方程及
方程组中。
*/
///代码:
/*
**name:欧几里得算法(辗转相除法)
**functuion:求gcd(a,b)
*/
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
/*
**name:扩展欧几里得算法
**functuion:存在整数x,y使得gcd(a,b) = ax+by,求其中一组解x0,y0
*/
int t,p,c;
///t = x0,p = y0,c = gcd(a,b)
void extend_euild(int a,int b){
if(b==0){
t = 1;
p = 0;
c = a;
}
else {
extend_euild(b,a%b);
int temp = t;
t = p;
p = temp-a/b*p;
}
}
///扩展:
/*
(1)通解:x = x0+(b/gcd)*t;
y = y0-(a/gcd)*t;
(2)应用:
*求解不定方程
*求解模线性方程
*求解模的逆元(a有逆元的充要条件:gcd(a,mod)==1)
*/