注:若无说明,数值范围均为\mathbf{Z}Z的子集

\large\texttt{欧几里得算法}欧几里得算法若a<b,\gcd(b,a\bmod b)=\gcd(b,a)=\gcd(a,b)a<b,gcd(b,amodb)=gcd(b,a)=gcd(a,b)

a\geqslant b,a=q\times b+r,0\leqslant r<bab,a=q×b+r,0r<b

r=a\bmod br=amodb

对于a,ba,b的任意公约数dd,d|(a-qb)d(aqb),即d|rdr,因此dd也是b,rb,r的公约数。

递归写法:

int gcd(int a,int b){
    return b?gcd(b,a%b):a;
}

非递归写法:

int gcd(int a,int b){
    while(a^=b^=a^=b%=a);return b;
}

\large\texttt{欧拉函数 }\varphi\left(N\right)=N\prod_{\text{质数}p|N}\left(1-\frac{1}{p}\right)欧拉函数 φ(N)=N质数pN(1p1)

证明:[1,N][1,N]中不与NN含有共同质因子pp或qq的个数为N-\dfrac{N}{p}-\dfrac{N}{q}+\dfrac{N}{pq}=N\left(1-\dfrac{1}{p}-\dfrac{1}{q}-\dfrac{1}{pq}\right)=N\left(1-\dfrac{1}{p}\right)\left(1-\dfrac{1}{q}\right)NpNqN+pqN=N(1p1q1pq1)=N(1p1)(1q1)

可推广至多个数的情况

性质:

1.1. 是积性函数

2.2\forall n>1,[1,n]n>1,[1,n]中与nn互质的数的和为\dfrac{n\times\varphi(n)}{2}2n×φ(n)

3.3. 若p|npn且p^2|n,p2n,则\varphi(n)=\varphi\left(\dfrac{n}{p}\right)\times pφ(n)=φ(pn)×p

4.4. 若p|npn但p^2\nmid n,p2n,则\varphi(n)=\varphi\left(\dfrac{n}{p}\right)\times(p-1)φ(n)=φ(pn)×(p1)

5.5\sum\limits_{d|n}\varphi(d)=ndnφ(d)=n

int phi(int n){
    int ans=n;
    for(int i=2;i*i<=n;++i)
        if(n%i==0){
            ans=ans/i*(i-1);
            while(n%i==0)n/=i;
        }
    if(n>1)ans=ans/n*(n-1);
    return ans;
}

线性筛欧拉函数

phi[1]=1;
for(int i=2;i<=N;++i){
    if(!np[i]){
        p[++tot]=i;
        phi[i]=i-1;
    }
    for(int j=1;j<=tot&&i*p[j]<=N;++j){
        np[i*p[j]]=true;
        phi[i*p[j]]=phi[i]*(i%p[j]?p[j]-1:p[j]);
        if(i%p[j]==0)break;
    }
}

\large\texttt{扩展欧几里得}扩展欧几里得求解同余方程 ax\equiv1\pmod bax1(modb)

ax+by=1ax+by=1

\because \gcd(a,b)|ax+bygcd(a,b)ax+by

\therefore 1\bmod \gcd(a,b)=01modgcd(a,b)=0

\therefore∴ 方程有解的必要条件是 \gcd(a,b)=1gcd(a,b)=1

以下为解的求法

x,yx,y是ax+by=\gcd(a,b)ax+by=gcd(a,b)的一组解

x_2,y_2x2,y2ax_2+by_2=\gcd(b,a\bmod b)ax2+by2=gcd(b,amodb)的一组解

ax+by=\gcd(a,b)=\gcd(b,a\bmod b)=bx_2+(a\bmod b)y_2ax+by=gcd(a,b)=gcd(b,amodb)=bx2+(amodb)y2

=bx_2+\left(a-b\left\lfloor \dfrac{a}{b}\right\rfloor\right)y_2=bx2+(abba)y2

=bx_2+ay_2-by_2\left\lfloor \dfrac{a}{b}\right\rfloor=bx2+ay2by2ba

=ay_2+b\left(x_2-y_2\left\lfloor \dfrac{a}{b}\right\rfloor\right)=ay2+b(x2y2ba)

x_2,y_2x2,y2求出后,方程一组解为x=y_2,y=x_2-y_2\left\lfloor \dfrac{a}{b}\right\rfloorx=y2,y=x2y2ba

综上,当b\ne 0b=0时,递归求解,否则x=1,yx=1,y取任意整数

对于一般的线性同余方程ax\equiv b\pmod caxb(modc)

可以写成ax+cy=bax+cy=b,有解的充要条件是\gcd(a,c)|bgcd(a,c)b

ll exgcd(ll a,ll b,ll &x,ll &y){
    if(b){ll d=exgcd(b,a%b,y,x);y-=a/b*x;return d;}
    x=1;y=0;return a;
}

\large\texttt{乘法逆元}乘法逆元若ax\equiv1\pmod pax1(modp),且aa与pp互质,则定义xx为aa的逆元,记为a^{-1}a1

用于在模意义下做除法

费马小定理

如果pp是质数,那么a^{p-1}\equiv1\pmod pap11(modp)

\because ax\equiv 1\pmod pax1(modp)

\therefore ax\equiv a^{p-1}\pmod paxap1(modp),即x=a^{p-2}x=ap2,用快速幂求解

欧拉定理

如果a,pa,p互质,a^{\varphi(p)}\equiv1\pmod paφ(p)1(modp)

pp为质数时,\varphi(p)=p-1φ(p)=p1

x=a^{p-2}x=ap2,快速幂

解同余方程

由于\gcd(a,p)=1gcd(a,p)=1,原方程等价于ax+py=1ax+py=1,扩欧求解即可

线性递推

k=\left\lfloor\dfrac{p}{i}\right\rfloor,r=p\bmod ik=ip,r=pmodi则p=ki+rp=ki+r

ki+r\equiv0\pmod pki+r0(modp)

kr^{-1}+i^{-1}\equiv0\pmod pkr1+i10(modp)

i^{-1}\equiv-kr^{-1}\pmod pi1kr1(modp)

i^{-1}=-\left\lfloor\dfrac{p}{i}\right\rfloor(p\bmod i)^{-1}i1=ip(pmodi)1

为了保证0<i^{-1}<p0<i1<p,将上式写成i^{-1}=\left(p-\left\lfloor\dfrac{p}{i}\right\rfloor\right)(p\bmod i)^{-1}\bmod pi1=(pip)(pmodi)1modp

inv[1]=1;
for(int i=2;i<=N;++i)inv[i]=(p-p/i)*inv[p%i]%p;

阶乘逆元

\dfrac{1}{n!}\equiv\dfrac{n+1}{(n+1)!}\pmod pn!1(n+1)!n+1(modp)

可以先求出n!n!的逆元,倒推求出i!i!的逆元(1\le i<n)(1i<n)

也可以线性求[1,n][1,n]的逆元后递推得到

离线逆元

要离线求nn个数的逆元

线性递推出前缀积和前缀积逆元即可

\mathcal O(n+\log p)O(n+logp)

\large\texttt{裴蜀定理}裴蜀定理\gcd(a,b)|c\texttt{是}ax+by=c\left(x,y\in \mathbf Z\right)\texttt{有解的充要条件}gcd(a,b)cax+by=c(x,yZ)有解的充要条件

必要性证明:

d=\gcd(a,b)d=gcd(a,b),则d|a,a|bda,ab

\therefore d|ax,d|bydax,dby

\therefore d|cdc,即\gcd(a,b)|cgcd(a,b)c

解可用扩欧求得

\large\texttt{莫比乌斯函数 }\mu莫比乌斯函数 μ

NN的质因数分解为N=\prod\limits_{i=1}^{m}p_i^{c_i}N=i=1mpici

\mu(N)=\begin{cases}1&N=1\\(-1)^{m}&N>1,\forall i\in[1,m],c_i=1\\0&N>1,\exists i\in[1,m],c_i>1\end{cases}μ(N)=1(1)m0N=1N>1,i[1,m],ci=1N>1,i[1,m],ci>1

性质:

1.1. 是积性函数

2.2\sum\limits_{d|n}\mu(d)=[n=1]=\begin{cases}1&n=1\\0&n>1\end{cases}dnμ(d)=[n=1]={10n=1n>1

,且\muμ是满足该性质的唯一积性函数

3.3\sum\limits_{d|n}\dfrac{\mu(d)}d=\dfrac{\varphi(n)}{n}dndμ(d)=nφ(n)

线性筛\muμ:

mu[1]=1;
for(int i=2;i<=N;++i){
    if(!np[i]){
        p[++tot]=i;
        mu[i]=-1;
    }
    for(int j=1;j<=tot&&i*p[j]<=N;++j){
        np[i*p[j]]=true;
        mu[i*p[j]]=(i%p[j]?-mu[i]:0);
        if(i%p[j]==0)break;
    }
}

莫比乌斯反演

F(n)=\sum\limits_{d|n}f(d)\Leftrightarrow f(n)=\sum\limits_{d|n}\mu(d)F\left(\dfrac{n}{d}\right)F(n)=dnf(d)f(n)=dnμ(d)F(dn)

\Large\texttt{中国剩余定理 CRT/EXCRT}中国剩余定理 CRT/EXCRT

用于求解同余方程组\begin{cases} x \equiv a_1\ ({\rm mod}\ m_1) \\ x\equiv a_2\ ({\rm mod}\ m_2) \\ ... \\ x \equiv a_n\ ({\rm mod}\ m_n)\end{cases}xa1 (mod m1)xa2 (mod m2)...xan (mod mn)

CRT

m_1,m_2,\dots,m_nm1,m2,,mn两两互质

M_i=\dfrac{\prod\limits_{j=1}^nm_j}{m_i},t_iMi=mij=1nmj,tiM_it_i\equiv 1\pmod{m_i}Miti1(modmi)的一个解

则原方程的一个解为x=\sum\limits_{i=1}^na_iM_it_ix=i=1naiMiti,通解为x+k\prod\limits_{j=1}^nm_j,k\in\mathbf{Z}x+kj=1nmj,kZ

将解代入方程即可证明

EXCRT

m_imi不一定两两互质

m=\mathrm{lcm}(m_1,m_2,\dots,m_{k-1})m=lcm(m1,m2,,mk1)

假设前k-1k1个方程的解为xx,且存在t\in\mathbf{Z}tZ使x+tm\equiv a_k\pmod{m_k}x+tmak(modmk)

x'=x+tmx=x+tm就是前kk个方程的一个解

上述同余方程可用扩欧求解

\Large\texttt{Baby Step,Giant Step}Baby Step,Giant Step

用于求解同余方程a^x\equiv b\pmod maxb(modm)

BSGS

a,ma,m互质,可以在模mm意义下进行除法

t=\left\lceil\sqrt m\right\rceil,x=it+j~(0\le i\le t~0\le j< t)t=m,x=it+j (0it 0j<t)

a^{it+j}\equiv b\pmod mait+jb(modm)

对于0\le j<t0j<t,将a^jaj插入\texttt{Hash}Hash表

枚举ii,查找是否有解

EXBSGS

不保证a,ma,m互质

\because a^x\equiv b\pmod maxb(modm)

\therefore a^{x-1}\times a\equiv b\pmod max1×ab(modm)

\therefore a\times a^{x-1}+m\times k=ba×ax1+m×k=b

d=\gcd(a,m)d=gcd(a,m)

由裴蜀定理,若d\nmid bdb,方程无整数解

d\mid bdb,则a^{x-1}\dfrac ad\equiv\dfrac b d\pmod{\dfrac m d}ax1dadb(moddm)

a^{x-1}\equiv\dfrac{\dfrac bd}{\dfrac ad}\pmod{\dfrac md}ax1dadb(moddm)

\gcd\left(a,\dfrac md\right)=1gcd(a,dm)=1,用BSGS求解

否则,重复上述过程

\Large\texttt{Lucas定理}Lucas定理

用于求\binom nm\bmod p(mn)modp

Lucas

pp为质数,则\binom nm\equiv \binom{\left\lfloor\frac np\right\rfloor}{{\left\lfloor\frac mp\right\rfloor}}\times \binom{n\bmod p}{m\bmod p}\pmod p(mn)(pmpn)×(mmodpnmodp)(modp)

引理:(1+x)^p\equiv1+x^p\pmod p:(1+x)p1+xp(modp)

用二项式定理展开即得证

k=\left\lfloor\dfrac np\right\rfloor,r=n\bmod pk=pn,r=nmodp,则n=kp+rn=kp+r

\therefore(1+x)^n=(1+x)^{kp+r}=((1+x)^p)^k(1+x)^r\equiv(1+x^p)^k(1+x)^r\pmod p(1+x)n=(1+x)kp+r=((1+x)p)k(1+x)r(1+xp)k(1+x)r(modp)

\therefore\sum\limits_{i=0}^n\binom nix^i\equiv\sum\limits_{i=0}^k\binom kix^{pi}\sum\limits_{j=0}^r\binom rjx^j\pmod pi=0n(in)xii=0k(ik)xpij=0r(jr)xj(modp)

观察x^mxm项的系数,得

\binom nm\equiv \binom k{\left\lfloor\frac mp\right\rfloor}\binom r{m\bmod p}\pmod p(mn)(pmk)(mmodpr)(modp)

EXLucas

pp为合数,分解质因数得到p=\prod_{i=1}^kp_i^{c_i}p=i=1kpici

求出所有\binom nm\bmod p_i^{c_i}(mn)modpici,使用\texttt{CRT}CRT合并答案

\binom nm=\frac{n!}{m!(n-m)!}(mn)=m!(nm)!n!

提出分子分母中的质因数p_ipi,放到最后计算

考虑如何求\frac{n!}{\gcd(n!,p^{\infty})}gcd(n!,p)n!,即n!n!剔除质因数