这几个玩意儿忘光了。。。
中国剩余定理
对于线性同余方程组:
x≡a1(modm1)
x≡a2(modm2)
x≡a3(modm3)
…
x≡an(modmn)
定义
M=∏ni=1m
Mi=M/mi
tiMi≡1(modmi)
即
ti
为
Mi
模
mi
意义下的逆元
那么就可以构造出原方程组的通解:
x=∑aitiMi+kM(k∈Z)
这个东西代进原方程组是很显然成立的,至于证明看起来很难咱懒得看就不说了
那这个东西到底有啥用呢?
在我们需要求大数取模,而所模的数不是一个质数的情况下就需要用到啦
这里答案等于把模数分解质因数成
∏prii
的形式然后对每个不同的质数都求模就行了,注意这里如果
ri>1
的话要用特殊的方法来处理
然后说说求逆,求逆可以通过欧拉定理和扩展欧几里德来求,因为欧拉定理比较简单粗暴所以先说欧拉定理
欧拉定理
aϕ(n)≡1(modn) 其中a和n互质,然后就没了。。。
扩展欧几里德
先说一些性质:
贝祖定理:ax+by=c有解当且仅当gcd(a,b)|c
可以注意到:ax+by=1 (gcd(a,b)==1)好像没什么用。。。
然后就直接上exgcd模板!完美解决!
求出一组解x0,y0之后可以根据性质通过通解公式:
x=x0+bgcd(a,b)∗t,y=y0−agcd(a,b)∗t
求出其他符合条件的解
那么说完这两个东西再说说具体怎么求逆
ax≡1(modb)
x有解的前提是a,b互质
根据欧拉定理我们可以得到:
aϕ(n)=a∗aϕ(n)−1≡1(modb)
那么显然a的逆元就是
aϕ(n)−1
了
用扩展欧几里德的话由 ax≡1(modb) 就可以得到ax+by=1,很显然吧,那么直接套exgcd求出x就是逆元了