数论

写的太急,不润色了

博客园先行更新,欢迎提出建议

欧拉筛

每个数只被最小的质因数遍历,

利用遍历时的两数关系(是否互质)可以求解各种约数信息与积性函数信息。

最大公约数

\(\gcd(x,y)=\gcd(x\bmod y,y)=\gcd(y,x\bmod y)\)

同时,在这个过程中,我们可以用exgcd求解方程 \(ax+by=gcd(a,b)\) 的解。

过程:

\[设ax_1+by_1=\gcd(a,b),\\ bx_2+(a\bmod b)y_2=\gcd(b,a\bmod b)\\ \\ \because \gcd(a,b)=\gcd(b,a\bmod b)\\ \therefore ax_1+by_1=bx_2+(a\bmod b)y_2\\ 又\because a\bmod b=a-\left(\left\lfloor\frac ab\right\rfloor \cdot b\right)\\ \therefore ax_1+by_1=bx_2+\left(a-\left(\left\lfloor\frac ab\right\rfloor \cdot b\right)\right)y_2\\ \therefore ax_1+by_1=ay_2+bx_2-\left\lfloor\frac ab\right \rfloor \cdot by_2\\ =ay_2+b\left(x_2-\left\lfloor\frac ab\right\rfloor y_2\right)\\ \because a=a,b=b\\ \therefore x_1=y_2,y_1=x_2-\left\lfloor\frac ab\right\rfloor y_2 \]

为此,我们可以求出它的一组特定解。

int exgcd(int a, int b, int &x, int &y)  //返回gcd值,x,y值
{
    if (!b) 
    {
        x = 1, y = 0; // ax=a
        return a;
    }
    int g = exgcd(b, a % b, y, x);
    y -= x * (a / b);
    return g;
}

利用

费马小定理

对于素数 \(p\),有

\[a^{p-1}\equiv 1\mod p \]

证明:

\[\forall 1\le x,y < n,x\ne y:ax\not\equiv ay\mod p \\ 证明:当ax\equiv ay\\ ax-ay\equiv a(x-y) \equiv 0\mod p\\ x\equiv y\mod p,矛盾\\ \\ \because ax\not \equiv ay\\ \therefore \prod_{x=1}^{p-1} \equiv \prod_{x=1}^{p-1} ax\mod p\\ \therefore \prod_{x=1}^{p-1} \equiv a^{p-1}\cdot \prod_{x=1}^{p-1}x\mod p\\ \therefore (a^{p-1}-1)\cdot \prod_{x=1}^{p-1}\equiv 0 \mod p\\ \therefore a^{p-1}-1\equiv 0\mod p\\ \therefore a^{p-1}\equiv 1\mod p \]

模意义逆元

指一个数 \(b\) 满足 \(ab\equiv 1\mod p\),这让 \(b\) 等价于 \(a^{-1}\).

根据线性同余方程,有逆元的充要条件是 \((a,p)=1\).

利用费马小定理,可以解决 \(p\) 为素数的逆元问题.

\[a\cdot a^{p-2} \equiv 1\mod p\\ a^{p-2}即为逆元 \]

线性同余方程

\(ax\equiv b\mod m\)

\((a,m)=1\) 时, \(x\equiv a^{-1}b\mod m\)

可是不互质呢?

我们可以发现,这等价于 \(ax + my = b\).如何解这个方程?

二元一次不定方程

\((a,b)=1\) 时,
有特解 \(a\cdot x_0+b\cdot y_0=1\)

然后,解可表示为

\[\left\{\begin{matrix} x=x_0+k\cdot b \\ y=y_0-k\cdot a \end{matrix}\right. \\ k为整数 \]

证明

易知这必然为答案。

接下来证除这种形式无其它解。

详情

\[\because \left\{\begin{matrix} ax+by=1 \\ ax_0+by_0=1 \end{matrix}\right. \\ \therefore \left\{\begin{matrix} a_x\equiv 1\mod b \\ a_{x_0}\equiv 1\mod b \end{matrix}\right. \therefore a(x-x_0)\equiv 0 \mod b \\ \therefore x\equiv x_0\mod b \]

一般形式

\(ax+by=c\) 何时有解?

只有当 \(c\)\(d=(a,b)\) 的倍数才可以。

证明 * 此时有解。

\(a\cdot x_0\frac cd+b\cdot y_0\frac cd = c\).

  • 只有此时有解

裴蜀定理(Bézout's lemma): 集合 \({ax+by}\)\({k\gcd(a,b)}\) 相同

特解:

我们首先用 exgcd 求出 \(ax+by=d\) 的解 \(x_0,y_0\)

\[ax_0+by_0=d\\ ax_0\cdot \frac cd+by_0\cdot \frac cd=c\\ a\frac {x_0c}d+by_0\cdot \frac{y_0c} d=c \]

此时,方程 \(ax+by=c\) 的特解 \(x_0',y_0'\) 可以表示为

\[x_0'=x_0\cdot \frac cd\\ y_0'=y_0\cdot \frac cd \]

通解:

\[ax+by=c \\ x_0'=x_0\cdot \frac c d\\ y_0'=y_0\cdot \frac c d\\ x_0'+by_0'=c\\ x\equiv x_0'\mod \frac b d\\ \left\{\begin{matrix} x=x_0'+k\cdot \frac bd \\ y=y_0'-k\cdot \frac ab \end{matrix}\right. \]


回到原来方程,它可以转为 \(ax+my=b\) 。这就与刚才一样了。

最终通解为

\[x\equiv x_0'\mod \frac m {(a,m)} \]

线性同余方程组

问题:解形如如下形式的同余方程

\[\left\{\begin{matrix} x\equiv a_1\mod p_1 \\ x\equiv a_2\mod p_2 \\ \vdots \\ x\equiv a_n\mod p_n \end{matrix}\right. \]

何时有解?通解如何表示?

简单形式

\(p_i\) 均为质数时,我们有中国剩余定理。

我们可以找 \(x_1\) 满足

\[\left\{\begin{matrix} x_1\equiv1\mod p_1 \\ x_1\equiv 0 \mod p_2 \\ \vdots \\ x_1\equiv 0 \mod p_n \end{matrix}\right. \]

容易发现,令 \(m=p_2\cdot p_3\cdot \dots \cdot p_n\) 时, \(x_1=m\cdot(m^{-1})\mod p_1\).

\(x_j\) 均可如此求。

此时便能找到特解 \(x'=\sum_{i=1}^n a_i\cdot x_i\)\

通解为 \(x\equiv x'\mod \prod_{i=1}^np_i\)

一般形式

\(p_i\) 两两互质,也可以得到同样的结果。此时,问题只在求逆元。我们不能用简单的费马小定理,只能解同余方程。

!!!EX CRT扩展中国剩余定理

对于任意 \(m_i\) 的同余方程组

\[\left\{\begin{matrix} x\equiv a_1\mod m_1 \\ x\equiv a_2\mod m_2 \end{matrix}\right. \]

我们可以得到 \(x=a_1+p_1m_1=a_2+p_2m_2\).

\(p_1m_1+p_2m_2=a_1-a_2\)

所以 \(p_1=p_1'+k\frac {m_2}{(m_1,m_2)}\)\(p_1'\)可用exgcd求解

利用这一点,我们可以得到 \(x_0=a_1+p_1m_1=a_1+m_1\left (p_1'+k\frac{m_2}{(m_1,m_2)}\right )\)

故通解 \(x\equiv \frac{a_1+m_1p_1'}{x_0}\mod \frac{m_1m_2}{(m_1,m_2)}\)

注意,当 \(a_2-a_1 \nmid (m_1,n_2)\) 时无解。

我们称其为 扩展中国剩余定理

对于

\[\left\{\begin{matrix} x\equiv a_1\mod m_1 \\ x\equiv a_2\mod m_2 \\ \vdots \\ x\equiv a_n\mod m_n \end{matrix}\right. \]

我们可以两两合并求解。

再扩展,

\[\left\{\begin{matrix} A_1x\equiv B_1\mod m_1 \\ A_2x\equiv B_2\mod m_2 \\ \vdots \\ A_nx\equiv B_n\mod m_n \end{matrix}\right. \]

我们可以把每一项基于exgcd求出

数论函数

值域为(正)整数(一般来说为正整数,为满足逆元可能扩充域),与同余有关

数论函数有加法: \((f+g)(n)=f(n)+g(n)\)

算法竞赛常见数论函数有 \(1(n)=1,\varepsilon(n)=[n=1],id(n)=n,\varphi(n),\mu(n)\)

欧拉函数

记作 \(\varphi(x)\),函数值为 \(\varphi(x)=\sum_{1<i<x}[(i,x)=1]\),即 \(x\) 以下与 \(x\) 互质数的个数。

欧拉函数可以表示为 \(\varphi(x)=m\cdot \prod_{p\mid x}{1-\frac 1p}\)

欧拉函数是积性函数(\(\varphi(a\cdot b)=\varphi(a)\cdot\varphi(b)\))。

欧拉函数有 \(\varphi(\frac nd)=\sum_{i=1}^{\frac nd}[\gcd(i,\frac nd)=1]\)\(\sum_{d\mid n} \varphi(d)=n\) 的性质。

第一条
第二条

\[n=\sum_{d\mid n}\sum_{i=1}^n[\gcd(i,n)=d]=\sum_{d\mid n}\varphi(\frac nd)=\sum_{d\mid n} \varphi(d) \]

欧拉定理

对费马小定理的扩展。

\[a^b\equiv a^{b\bmod \varphi(m)}\mod m \ \ \ \gcd(a,b)=1 \]

扩展欧拉定理

\[\left \{ \begin{matrix} a^b\equiv a^{b\bmod \varphi(m)}&\mod m &(a,m)=1 \\ a^b\equiv a^b&\mod m &b<\varphi(m) \\ a^b\equiv a^{(b\bmod \varphi(m))+\varphi(m)}&\mod m & b\ge \varphi(m)\\ \end{matrix} \right . \]

该定理在形如 \(a_1^{a_2^{...}} \bmod m\)幂塔 上降幂有很大作用,因为可以证明对一个数 \(x\),取 \(\varphi(\varphi(...\varphi(x)...))\) 的值,只用取 \(\log x\) 的量级次。一般来说,我们只需要对每一组模数 \(m\) 预处理 \(\varphi(m),\varphi(\varphi(m)),...\),不怎么需要线性筛。

需要注意的是,在有限次幂上,不能保证 \(b\ge \varphi(m)\) 时,要特意处理,这也是主要难点之一。


卷积

对于数论函数 \(f_1,f_2\) 形如 \(f_1(x)=a_0x^0+a_1x^1+...+a_nx^n,f_2(x)=b_0x^0+b_1x^1+...+b_nx^n\),有卷积后的函数 \(F=f_1\cdot f_2=a_0b_0x^0+a_0b_1x^1+......\) (多项式乘法)

我们可以看系数集的关系。这样可以得到

\[F(x)=\sum_{i=0}^{\infty}\left(\sum_{j+k=i}a_j\cdot b_k\right) x^i \]

类似地,我们定义序列 \(A,B\) 卷积为 \((A*B)_i=\sum_{j+k=i}a_j\cdot b_k\),也就对应刚刚函数 \(i\) 次项系数。

把这个卷积运算推广到数论函数。

\[h=f*g\\ h(n)=\sum_{i+j=n}f(i)g(j) \]

可是这样我们就失去了大部分数论函数的数论特点(如积性),原因是因为唯一分解形式上出现加法

Dirichlet 卷积

我们这样定义数论函数卷积:

\[h(n)=(f*g)(n)=\sum_{i\cdot j=n}f(i) g(j) \]

它等价于

\[h(n)=(f*g)(n)=\sum_{d\mid n} f(d) g(\frac nd) \]

  1. \(h\) 仍为数论函数
  2. 它满足结合律
  3. 它满足交换律
  4. 它甚至满足 \((f_1+f_2)*f_3=f_1*f_3+f_2*f_3\) 的分配律
  5. 逆元 \(\exists g=f^{-1}\)
  6. 仍保持数论函数的积性(逆元也满足)(不满足完全积性)
  7. 存在单位元 \(\varepsilon (n)=[n=1]\) 满足 \(f*\varepsilon =\varepsilon *f=f\)

其中,逆元有很重要的作用,这里必须讲一讲

存在条件:\(f(1)\ne 0\)

形式:

\[g(1)=\frac 1{f(1)}\\ g(n)=\frac{\varepsilon(n)-\sum_{d>1,d\mid n} f(d)\cdot g(\frac nd)}{f(1)} \]

注意,当 \(f(1)\ne 1\) 时,逆元可能不在整数域。不过,积性函数都满足 \(f(1)=1\)。因为 \(f(n)=f(n)\cdot f(1)\)

其余性质的证明

数论函数是比较显然的

交换律:

\[f*g=g*f\\ \sum_{d\mid n}f(d)g(\frac nd)=\sum_{\frac nd\mid n} f(\frac nd)g(d) \]

结合律:

\[(f*g)*h=f*(g*h)\\ (f*g)*h=f*g*h=g*h*f=(g*h)*f=f*(g*h) \]

分配律

\[(f+g)*h=f*h+g*h\\ (f+g)*h(n)=\sum_{ij=n}(f+j)(i)h(j)=\\ \sum_{ij=n}(f+g)(i)\cdot h(j)=\\\sum_{ij=n}f(i)h(j)+\sum_{ij=n}g(i)h(j)\\ (f*h+g*h)(n)=(f*h)(n)+(g*h)(n)=\\\sum_{ij=n}f(i)h(j)+\sum_{ij=n}g(i)h(j) \\\therefore (f+g)*h=(f*h+g*h) \]

逆元:待补,,,

积性

\[\begin{array}{c} h(a)\cdot h(b) = \left(\sum_{d_1\mid a}f(d_1)g(\frac {d_1}a)\right)\cdot \left(\sum_{d_2\mid a}f(d_2)g(\frac {d_2}a)\right)\\ = \sum_{d_1\mid a, d_2\mid b} f(d_1d_2)g(\frac{ab}{d_1d_2})&(必须满足ab互质)\\ = \sum_{d\mid ab} f(d)g(\frac{ab}d) = h(ab) \end{array} \]

逆元积性

\[归纳 \\g(1)=g(1)\cdot g(1) \\根据定义,g(n_1n_2)=-\sum_{d>1,d\mid n_1n_2}f(d)g(\frac nd) \\ 令d=d_1\cdot d_2,d_1\mid n_1,d_2\mid n_2 \\ 原式=\sum_{d_1\mid n_1,d_2\mid n_2} f(d_1d_2)\cdot g(\frac {n_1n_2}{d_1d_2})\\ =\sum_{d_1\mid n_1,d_2\mid n_2} f(d_1)f(d_2)g(\frac{n_1}{d_1})g(\frac{n_2}{d_2})\\ =f(1)f(1)g(n_1)g(n_2)-\sum_{d_1\mid n_1,d_2\mid n_2}f(d_1)f(d_2)g(\frac {n_1}{d_1})g(\frac {n_2}{d_2})\\ =g(n_1)g(n_2)-\left(\sum_{d_1\mid n_1}f(d_1)g(\frac {n_1}{d_1})\right)\left(\sum_{d_2\mid n_2}f(d_2)g(\frac{n_2}{d_2})\right)\\ =g(n_1)g(n_2)-(f*g)(n_1)\cdot (f*g)(n_2)\\=g(n_1)g(n_2)-\varepsilon(n_1)\varepsilon(n_2)\\ =g(n_1)g(n_2) \]

最后一步中,因为 \(n_1n_2>1\),所以 \(\varepsilon(n_1)\)\(\varepsilon(n_2)\) 中必有 \(0\)

完全积性证伪:

\[f(1)=1,f(p)=a,f(p^2)=a^2\\ g(1)=1,g(p)=b,g(p^2)=b^2\\ h=f\ast g\\ h(p)=f(1)g(p)+f(p)g(1)=a+b\\ h(p^2)=f(1)g(p^2)+f(p^2)g(1)+f(p)g(p)=a^2+ab+b^2\\\ne h(p)^2=a^2+2ab+b^2 \]

莫比乌斯函数

Mobius函数的定义是

\[\mu(n)=\left\{\begin{matrix} 1&n=1\\0&\exist p:p^2\mid n\\(-1)^k&n=p_1p_2p_3\dots p_k\\ \end{matrix}\right. \]

分类讨论易知它为积性函数。

同时,还有定义 \(\mu=1^{-1}\)

Mobius 函数有重要性质:

\[\sum_{d\mid n} \mu(d)=[n=1]\Longleftrightarrow \mu*1=\varepsilon \]

证明

\[n=\prod_{i=1}^kp_i^{\alpha_i}\\ \varepsilon (n)=[n=1]\\ =\sum_{i=0}^k(-1)^i\left(^k_i\right)=(1+(-1))^k\\=[k=0]=[n=1] \]

类似第二式变形,我们有

\[\sum_{d\mid n}\varphi(d)=n\Longleftrightarrow \varphi * 1=id \]

对它恒等变形

\[\varphi * 1 * 1^{-1}=id*1^{-1}\\ \varphi=id*\mu \]

而对我们Mobius的性质变形,就是:

莫比乌斯反演

看看如下转换:

\[f(n)=\sum_{d\mid n} g(d)\\ f=g*1\\ f*\mu=g\\ g(n)=\sum_{d\mid n}f(d)\mu(\frac nd) \]

我们称其为反演公式。

如果我们把函数 \(f,g\) 用向量的映射形式 \(\vec{f},\vec{g}\) 表示,就会发现它们可以乘上一个固定的转移矩阵 \(A\),而且其存在逆。

\[A\cdot \vec{g}=\vec{f}\\ \vec{g}=A^{-1}\cdot \vec{f} \]

关于矩阵 \(A\) 的求解,我们有公式:

\[A_{n,d}=[d\mid n]\\ A_{n,d}^{-1}=[d\mid n]*\mu(\frac nd) \]

反演式可以用来加速这个矩阵(逆)的求解。

例题

\[\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j) \]

一般解

\[原式=\sum_{i=1}^n\sum_{j=1}^m\sum_{d\mid i, d\mid j} \varphi(d)\\ =\sum_{d=1}^n\varphi(d)\lfloor \frac nd\rfloor\lfloor \frac md\rfloor \]

Mubius求法:

\[原式=\sum_{d=1}^n\cdot \sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=d]\\ =\sum_{d=1}^nd\cdot \sum_{i=1}^{\lfloor\frac nd\rfloor}\sum_{j=1}^{\lfloor\frac md\rfloor}[\gcd (i,j)=1]\\ =\sum_{d=1}^nd\cdot\sum_{x=1}^{\lfloor\frac{n}{d}\rfloor} \mu(x)\cdot \sum_{i=1}^{\lfloor\frac nd\rfloor}\sum_{j=1}^{\lfloor\frac md\rfloor}\sum_{x\mid i,x\mid j}[x\mid i][x\mid j]\\ =\sum_{d=1}^nd\cdot \sum_{x=1}^{\lfloor\frac{n}{d}\rfloor} \mu(x)\lfloor \frac n{dx}\rfloor\lfloor \frac m{dx}\rfloor\\ 令T=dx\\ 上式=\sum_{T=1}^n(\sum_{d\mid T}d\mu(\frac Td))\lfloor \frac n{T}\rfloor\lfloor \frac mT\rfloor\\ =\sum_{d=1}^n\varphi(d)\lfloor \frac nd\rfloor\lfloor \frac md\rfloor \]

简单版:SDOI2008仪仗队

例题2:JZPTAB

\[\sum_{i=1}^n\sum_{j=1}^mlcm(i,j) \]

\[原式=\sum_{i=1}^n\sum_{j=1}^m\frac{ij}{\gcd(i,j)} \\ =\sum_{d=1}^n\sum_{i=1}^n\sum_{j=1}^m\frac{ij}{d}[\gcd(i,j)=d]\\ =\sum_{d=1}^nd\cdot \sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor} ij[\gcd(i,j)=d]\\ =\sum_{d=1}^nd\cdot \sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor} ij\sum_{x\mid i,x\mid j} \mu(x)\\ =\sum_{d=1}^n d\cdot \sum_{x=1}^{\lfloor\frac{n}{d}\rfloor} x^2\mu(x)\sum_{i=1}^{\lfloor \frac{n}{dx}\rfloor}\sum_{j=1}^{\lfloor \frac m{dx}\rfloor}ij\\ 令S(n)=1+2+3+...+n=\frac{n(n+1)}2, T=dx\\ 上式=\sum_{d=1}^n d\cdot \sum_{x=1}^{\lfloor\frac{n}{d}\rfloor} x^2\mu(x)S(\lfloor\frac{n}{dx}\rfloor)S(\lfloor\frac{m}{dx}\rfloor) \\ =\sum_{T=1}^nS(\lfloor \frac nT\rfloor)S(\lfloor \frac mT\rfloor)(\sum_{x\mid T} x\mu(x))\\ 其中,h(T)=\sum_{x\mid T} x\mu(x)是积性函数,所以可以求。原因:\\ 令h=g*1,满足g(x)=x\cdot \mu(x) ,易知g为积性,故h积性 \]

整除分块

不知道放哪的杂项,单独分一类

我们计算时常常遇到形如 \(\sum \left \lfloor \frac {n}{i} \right \rfloor\) 的式子。刚好,我们有一种 \(\Theta(n)\) 时间复杂度的算法:整除分块

我们知道, \(\left \lfloor\frac{n}{i}\right\rfloor\) 的取值在 \(\sqrt n\) 级别。理由:

  • \(i\le \sqrt n\) ,此时有 \(\sqrt n\) 种取值
  • \(i>\sqrt n\),此时 \(\left \lfloor\frac{n}{i}\right\rfloor \le \sqrt n\)

整除分块就是求对于 \(l\),找最大的 \(r\) 满足 \(\left \lfloor\frac{n}{l}\right\rfloor=\left \lfloor\frac{n}{r}\right\rfloor\)

设这个等式两边的值为 \(k\),则

\[\left \lfloor \frac nr\right \rfloor=k\Longleftrightarrow k\le \frac nr<k+1\\ n\le\frac nk \\ r_{\max}=\left \lfloor \frac nk\right \rfloor \]

当然这只适用于部分情况。有时候不等号方向会改变,需要我们同时讨论两个界来求最大或最小。向上取整也一样。

如果我们要求 \(\sum \lfloor\frac ni\rfloor \lfloor \frac mi \rfloor\) 呢?

我们分别计算 \(r_n,r_m\) 表示不同的 \(r_{\max}\),能发现取 \(\min(r_n,r_m)\) 就可以得到答案。

一般来说,我们可以用这种方式在 \(\Theta(\sqrt n)\) 的时间复杂度内解决包含向下取整的问题。

posted @ 2026-07-09 08:58  c_haoc  阅读(14)  评论(0)    收藏  举报