1. 程式人生 > 其它 >數論模板複習

數論模板複習

基本結論:

費馬小定理:若p為質數,則

尤拉定理:若a,n互質,則

尤拉函式計算公式:

擴充套件歐幾里得演算法(Exgcd)

計算不定方程的一組特解。

由貝祖定理,上方程有解當且僅當時有解。程式碼中exgcd函式求出的是的解。將其乘上c/d即可得到原方程的解。

設x',y'為方程的一組特解,則方程通解可表示為:

程式碼:

int a,b,c,d,t,x,y;
int exgcd(int a,int b,int &x,int &y) {
    if(b == 0) {
        x=1; y=0; return a;
    }
    int dd=exgcd(b,a%b,x,y),xx=x;
    x
=y; y=xx-(a/b)*y; return dd; } int main() { a=read(); b=read(); c=read(); x=0; y=0; d=exgcd(a,b,x,y); if(c % d) { printf("-1\n"); } x=x*c/d; y=y*c/d; printf("%d %d ",x,y); }

對於線性同餘方程,我們可以將其轉化成不定方程來求解

乘法逆元

用於將取模時的除法運算轉換成乘法運算。即求出中的x.

求法:

1.費馬小定理+快速冪

a,p互質時,逆元即為ap-2

(mod p)

2.exgcd

即求解同餘方程

3.線性遞推求1~n中每個數的逆元