你说得对,我也不知道怎么整合到数数论论里。
\((a,b)=1\) 是 \(ax\equiv 1(\bmod b)\) 有解的充要条件。
首先,对于 \(x=0\rightarrow b-1\),\(ax\equiv y(\bmod b)\),\(y\) 互不相同。
证明考虑加加减减。
考虑求出这个解,得到 \(ax=by+1\)。
不难有推论:若 \((a,b)=1\),\(ax+by=1\) 有整数解。
进一步的,\(ax+by=(a,b)\) 有整数解。
这就是 exgcd 的形式。
进一步考虑 \(a+b=c\),有解的条件显然是 \((a,b)|c\)。
然后可以根据刚才的来做。
这是 exgcd 吗?这不是 exgcd。
因此我们称为 byrgcd。
while(T--){
read(a),read(b),read(c);
int d=std::__gcd(a,b);
if(c%d!=0){
println(-1);
continue;
}
a/=d,b/=d;
int x=ksm(a,phi[b]-1,b);
int y=(a*x-1)/b;
y=-y;
x*=d,y*=d;
x*=c/d,y*=c/d;
printsp(x),println(y);
}
上面用到了欧拉定理。
\(\dfrac{b}{d}\) 不一定是质数,不能用费马小定理。
你知道什么是裴蜀定理吗?就是上面那坨东西有解。
上面只是求出来一组特解 \(x_0,y_0\)。
通解的形式:\(x=x_0+\dfrac{b}{d}\times k,y=y_0-\dfrac{a}{d}\times k\)。
为什么所有通解都能被这种形式表示出来?
因为 \((\dfrac{b}{d},\dfrac{a}{d})=1\),然后乱证一下。
一个更加正经的 exgcd 是在求 gcd 时推一下。
中国剩余定理
考虑合并两个同余方程:
\[x\equiv a_1(\bmod m_1) \]\[x\equiv a_2(\bmod m_2) \]改写一下?
\[x=pm_1+a_1 \]\[x=qm_2+a_2 \]\[pm_1+a_1=qm_2+a_2 \]\[pm_1-qm_2=a_2-a_1 \]oops,这是什么!
exgcd。
怎么合并?
可以构造出一个 \(x_0\) 满足两个方程。
我们断言,解的形式为 \(x_0+k\times\operatorname{lcm}(m_1,m_2)\)。
显然。
然后合并起来就是 \(x\equiv x_0(\bmod \operatorname{lcm}(m_1,m_2))\)。
没了。
怎么避免炸 long long?
先除后乘。
加上题解区一些神秘的做法。
lucas
p 是质数
对于组合数在 p 进制下做分解,然后组合一下乘起来。
进行一些简单的证明活动。
\((1+x)^p\equiv 1+x(\bmod p)\)。
你大概会二项式定理。
拆开。
然后乱证。
\(p=2\) 时 lucas 可以表示成 \(C_n^m=1\) 当且仅当 \(n\&m=m\)。
逆元
线性求一堆数的逆元
前缀积,然后推式子。
exlucas
标签:摆烂记,dfrac,bmod,exgcd,ax,定理,zr,equiv From: https://www.cnblogs.com/BYR-KKK/p/18307689