exgcd有关同余问题
关于同余关系的一些定理:
-
自反性:\(a\equiv a\pmod{m}\)
-
对称性:\(a\equiv b\pmod{m}\),则\(b\equiv a\pmod{m}\)
-
传递性:\(a\equiv b\pmod{m}\),且\(b\equiv c\pmod{m}\),则\(a\equiv c\pmod{m}\)
同余的三则运算:
若\(a,b,c\)为整数,\(m\)为正整数,且\(a\equiv b\pmod{m}\)
-
\({a+c}\equiv {b+c}\pmod{m}\)
-
\({a-c}\equiv {b-c}\pmod{m}\)
-
\({a\times c}\equiv {b\times c}\pmod{m}\)
同余式的三则运算:
\(a,b,c,d\)为整数,\(m\)为正整数,且\(a\equiv b\pmod{m}\),\(c\equiv d\pmod{m}\)
-
\({ax+cy}\equiv {bx+dy}\pmod{m}\)其中\(x,y\)为任意整数,即同余式可以相加
-
\({a\times b}\equiv {c\times d}\pmod{m}\),即同余式可以相乘
-
\({a^n}\equiv {b^n}\pmod{m}\),其中\(n>0\)
-
\(f(a)\equiv f(b)\pmod{m}\),其中\(f(x)\)为任意整数系多项式
扩展欧几里得:
数论证明就算了吧,利用扩展欧几里得定理我们可以求解\(ax+by=gcd(a,b)\)的问题
如果我们现在要求\(ax+by=m\),我们可以先用扩展欧几里得求\(ax+by=gcd(a,b)\),如果\(gcd(a,b)\)不能整除\(m\)则无解,否则在\(modm\)的意义下有\(gcd(a,b)\)个解,所有的解可以通过对其中一个解加减\(\dfrac{b}{gcd(a,b)}\)得到
code:
void exgcd(int a,int b,int &x,int &y){
if (!b){x = 1,y = 0;return;}
exgcd(b,a%b,y,x);
y -= (a/b)*x;
return;
}