El pueblo unido jamas serà vencido!

数学 : 从入门到入土

目录

  • 一点前置知识

  • 数论函数,莫比乌斯反演与卷积

  • 生成函数

  • 同余与乘法逆元

  • 组合数学

  • 期望与概率

前置知识

元,单位元和逆元

首先,这三个概念都是对于一个特定的运算而言的.

元就是运算的要素,在加减乘除里就是数,在狄利克雷卷积里就是数论函数,在矩阵乘法里就是矩阵.

单位元满足如下性质:

对于一个运算\(\operatorname{op}(x,y)\),定义单位元\(I\)使得\(\operatorname{op}(x,i) = \operatorname{op}(i,x) = x\).

例如在加法,单位元就是\(0\),乘法单位元为\(1\),矩阵乘法单位元为单位矩阵\(I\),狄利克雷卷积单位元为单位元函数\(\varepsilon(x) = [x=1]\).

快速幂

对于一个幂\(x^p\),存在能在\(\mathrm{O}(\log n)\)时间复杂度去计算它的方式.

考虑\(p\)的奇偶.

\[x ^ p = \left \{ \begin{matrix} x ^ \frac{p}{2} \times x ^ \frac{p}{2}\ (p\ |\ 2)\\ x ^ \frac{p}{2} \times x ^ \frac{p}{2} \times x\ (p \not|\ \ 2) \end{matrix}\right. \]

即可.

代码实现求\(a \times b \bmod p\) :

ll qpow(ll a,ll b,ll p) {
	ll res = 1;
    while(b) {
    	if(b & 1) res = res * a % p;
        a = a * a % p;
        b >>= 1;
    }
    return res;
}

常用符号

\(\phi\),空集.

\(\LaTeX\):$\phi$

\(\varphi\),欧拉函数.

\(\LaTeX\):$\varphi$

\([\text{表达式}]\),艾佛森约定,即如果中括号内表达式为真则为1,为伪则为0.

\(\LaTeX\):$[ ]$

\(\mu\),莫比乌斯函数

\(\LaTeX\):$\mu$

\(\lfloor x \rfloor\)下取整.

\(\LaTeX\):$\lfloor \rfloor$

\(\lceil x \rceil\)上取整.

\(\LaTeX\):$\lceil \rceil$

数论函数,莫比乌斯反演与卷积

数论分块/整除分块

用于将带下取整(形如\(\lfloor\frac{n}{k} \rfloor)\)的合式从\(\Theta(n)\)优化到\(\Theta(\sqrt{n})\).

对于一个数\(n\)使得\(\lfloor \frac{n}{k} \rfloor = p\),不难发现对于一个特定的区间使得\(k \in [l,r]\)都有同样的\(p\)与之对应.

比如\(n = 10\),\(p = 2\),使得\(k \in [4,5]\)时,\(\lfloor \frac{n}{k} \rfloor = p\)均成立,于是求出每个块左右端点就可以简化求下取整的过程.

例题

P2261 [CQOI2007]余数求和

题意简单到离谱:

给出\(n,k\),求

\[\sum_{i = 1}^{n} k \bmod i \]

作为求和指标的\(i\)以模数的形式出现实在是十分奇妙.

szq巨神曾言道:式子都是越推越复杂然后解出来的

考虑模的意义:

\(k \bmod i = k - i\lfloor \frac{k}{i} \rfloor\)

式子化为:

\[\begin{aligned} &\sum_{i = 1}^{n} k - i\lfloor \frac{k}{i} \rfloor\\ &= nk - \sum_{i = 1}^{n} i\lfloor \frac{k}{i} \rfloor \end{aligned}\]

其中后一部分可以靠数论分块求得.

具体实现

首先要确定分母\(n\)和左端点\(l\).

这时候我们要找到一个最大的\(r\),使得

\(\lfloor \frac{n}{l} \rfloor = \lfloor \frac{n}{r} \rfloor\)

根据数论分块,有:

\[r = \left \lfloor \frac{n}{\left \lfloor \frac{n}{l}\right\rfloor}\right\rfloor \]

即可完成分块.

对于下一块,将上一块的右端点+1作为其左端点,重复此过程即可.

例题代码

int mian() {
	ll n = read(),k = read();
	ll ans = n * k;
	for(ll l = 1,r;l <= n;l = r + 1) {
		if(k / l) r = std::min(k / (k / l),n);
		else r = n;
		ans -= (k / l) * (r - l + 1) * (l + r) / 2;
	}
	write(ans);
	return 0;
}

数论函数

定义域为正整数集\(\mathbb{N^*}\)的函数.

常见的数论函数:

阶乘

\(n! = \prod^{n}_{i = 1} i\)

数列

\(\{a_i\}\)

\(n^\lambda\)

积性函数

一种特殊的数论函数,满足对于整数\(i,j\),当\(\gcd(i,j) = 1\),有:

\(f(ij) = f(i)f(j)\)

显然这条特性对于一个质数\(i\)的函数值被求出后可以拓展到更多函数值.

完全积性函数:

对于所有整数\(i,j\),

\(f(ij) = f(i)f(j)\)

常见的积性函数 :

欧拉函数

\(\varphi(x)\),代表\([1,x]\)里与\(x\)互质的数的个数

显然对于一个质数\(p\),有\(\varphi(p) = p - 1\)

void EulerPrime(int n) {
	phi[1] = 1;
	ff(i,2,n) {
		if(!vis[i]) {
			phi[i] = i - 1;
			prime[pcnt++] = i;	
		}
		ff(j,0,pcnt - 1) {
			if(1ll * i * prime[j] > N)
				break;
			vis[i * prime[j]] = 1;
			if(i % prime[j])
				phi[i * prime[j]] = phi[i] * (prime[j] - 1);
			else {
				phi[i * prime[j]] = phi[i] * prime[j];
        		break;
			}
		}
	}
}

莫比乌斯函数

\(\mu(x) = \left\{\begin{matrix} &1 (n = 1)\\ &0 (n \text{含有平方因子})\\ &(-1)^k,k\text{为}n\text{的本质不同因子个数} \end{matrix}\right.\)

这个定义十分令人迷惑.

由于唯一分解定理,每个自然数\(n\)都可以表示成:

\[n = \prod_{i = 1}^{k} p_i^{c_i} \]

其中\(p\)为质数.

那么莫比乌斯函数可以表示为:

\(\mu(x) = \left\{\begin{matrix} &1 (n = 1)\\ &0(\exists\ i,c_i \ge 2)\\ &(-1) ^ {\sum c_i} \ \mathrm{otherwise}. \end{matrix}\right.\)

单位元函数

\(\varepsilon(n) = [n = 1]\)

这个函数在狄利克雷卷积中作为单位元存在,即:

对于一个数论函数\(f(x)\),\(f * \varepsilon = f\)

例题

积性函数在OI中的地位体现在可以用线性筛在\(\Theta(n)\)复杂度内求出.

P3383 【模板】线性筛素数

模板中的模板,欧拉筛法.

相比于\(\mathrm{O}(n\log \log n)\)的埃拉托色尼筛法更加的快捷,代码量也不大.

原理是使一个合数总是被自己的最小质因数筛掉,防止像埃氏筛一样出现合数被多次标记的情况.

P2158 [SDOI2008] 仪仗队

考虑什么情况下会导致看不见另一个人.

将左下角的点和其他点连线,考虑每一个点对连线的斜率.

对于一个斜率\(\tan \theta = \frac{b}{a}\),有最小的\(\gcd(a,b) = 1\)使得其他斜率相同的连线形成的三角形都是其位似,即被最初这一对\(a,b\)所阻挡.

于是对于坐标\((i,j)\),有\(\gcd(i,j) = 1 \Leftrightarrow (i,j) \footnotesize\text{为可见点}\)

枚举每个横坐标,则这个横坐标对答案贡献为与其互质的纵坐标个数,这是对于下半部分等腰直角三角形的贡献,那么答案为:

\[1 + 2\sum_{i = 1}^{n - 1}\varphi(i) \]

线性筛即可.

狄利克雷卷积

函数卷起来了

更多例题

给出\(n\),求:

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

多倍经验:

P2398 GCD SUM

UVA11426 拿行李(极限版) GCD - Extreme (II)

SP3871 GCDEX - GCD Extreme

UVA11424 GCD - Extreme (I)

P1390 公约数的和

有些要忽略重复贡献,稍微减一下即可.

突然发现这好像是欧拉反演,不过这不要紧

众所周知,欧拉函数有一条奇妙的性质:

\[n = \sum_{d|n}\varphi(d) \]

然后还有\(\gcd\)的奇妙性质,于是我们把\(\gcd\)套进前面的式子.

\[\begin{aligned} \gcd(n,m) &= \sum_{d|\gcd(n,m)} \varphi(d)\\ &= \sum_{d | n} \sum_{d | m} \varphi (d) \end{aligned}\]

好像很棒的样子.

现在我们带回原式吧.

\[\begin{aligned} \sum_{i = 1}^{n} \sum_{i = 1}^{n} \gcd(i,j) &= \sum_{i = 1}^{n} \sum_{i = 1}^{n} \sum_{d | i} \sum_{d | j} \varphi (d) \ \footnotesize\text{式子太恶心,套一个艾佛森约定清爽一下}\\ &= \sum_{i = 1}^{n} \sum_{i = 1}^{n} \sum_{d = 1}^{n} \varphi (n) [d | i] [d | j]\\ &= \sum_{d = 1}^{n} \varphi (d) \sum_{i = 1}^{n} \sum_{j = 1}^{n} [d | i] [d | j]\ \footnotesize\text{交换求和顺序}\\ &= \sum_{d = 1}^{n} \varphi (d) \sum_{i = 1}^{n} [d | i] \sum_{j = 1}^{n} [d | j]\\ &= \sum_{d = 1}^{n} \varphi (d) \lfloor \frac{n}{d} \rfloor \lfloor \frac{n}{d} \rfloor \end{aligned}\]

就这么结束了.

求欧拉函数\(\mathrm{O}(n)\),然后直接枚举\(d\)即可.

当然可以整除分块,如果使用\(\mathrm{Powerful Number}\)筛求前缀和的话就是\(\mathrm{O}(\sqrt{n})\).

P1447 [NOI2010] 能量采集

是不是和仪仗队那道题特别像

这道题的特点是行数和列数不相等,于是重新从斜率的角度出发.

首先,点\((i,j)\)对答案没有贡献(即连线上没有植物)的条件是\(\gcd(i,j) = 1\).

考虑如何计算损失.

众所周知,有一种东西叫做位似.

显然点\((i,j)\)\((0,0)\)的路径上有\(\gcd(i,j) - 1\)个整点.

于是其贡献转化为\(2(\gcd(i,j) - 1) + 1 = 2\gcd(i,j) - 1\)

易得总贡献为:

\[\begin{aligned} \sum_{i = 1}^{n} \sum_{j = 1}^{m} (2\gcd(i,j) - 1) = -nm + 2\sum_{i = 1}^{n} \sum_{j = 1}^{m} \gcd(i,j) \end{aligned}\]

考虑如何计算二重合式的部分.

现在仍然是把欧拉反演的结论套上去,参考上一题即可:

\[\begin{aligned} \sum_{i = 1}^{n} \sum_{i = 1}^{m} \gcd(i,j) &= \sum_{i = 1}^{n} \sum_{i = 1}^{m} \sum_{d | i} \sum_{d | j} \varphi (d)\\ &= \sum_{i = 1}^{n} \sum_{i = 1}^{m} \sum_{d = 1}^{\max(n,m)} \varphi (n) [d | i] [d | j]\\ &= \sum_{d = 1}^{\max(n,m)} \varphi (d) \sum_{i = 1}^{n} \sum_{j = 1}^{m} [d | i] [d | j]\\ &= \sum_{d = 1}^{\max(n,m)} \varphi (d) \sum_{i = 1}^{n} [d | i] \sum_{j = 1}^{m} [d | j]\\ &= \sum_{d = 1}^{\max(n,m)} \varphi (d) \lfloor \frac{n}{d} \rfloor \lfloor \frac{m}{d} \rfloor \end{aligned}\]

同样的套路.

P3935 Calculating

简单的数学基础

巨佬们说的数学"直觉"

小学五年级学生都会的奥数

强大坚实的打表功力

看不出来你AFO吧

就能看出,这个公式是求:

\[\sum_{i = l}^{r} d(i) \]

其中\(d(x)\)为因数个数函数(除数函数).

一个简单的想法就是直接线性筛,可以直接得到70分,可喜可贺,可喜可贺.

尝试找到更优的解法,众所周知\(\sqrt{10^{14}} = 10^7\),于是考虑有没有根号级复杂度的算法.

考虑枚举因数,在一个区间\([1,n]\)中,数\(i\)作为因子出现的次数为\(\lfloor \frac{n}{i} \rfloor\),于是转化为前缀和相减的形式即可用数论分块求解了.

即:

\[\sum_{i = 1}^{r} \lfloor \frac{n}{i} \rfloor - \sum_{i = 1}^{l - 1} \lfloor \frac{n}{i} \rfloor \]

生成函数

又名母函数.

普通生成函数 (OGF)

对于一个数列 \(<a_n>\) 定义其普通生成函数为 :

\[\large A(x) = \sum_{n = 0}^{\infty} a_n x^n \]

举个例子 : 对于斐波那契数列 :

\[\large\begin{aligned} &f_0 = 0,f_1 = 1\\ &f_n = f_{n - 1} + f_{n - 2} \end{aligned}\]

做其 OGF 为 :

\[\large F(x) = \sum_{i = 0}^{\infty} f_n x^n \]

考虑递推式,其中有 \(f_{n - 1}\) 项与 \(f_{n - 2}\) 项,试构造恒等关系,使得其中对于高位部分 \(f_{n - 1}\)\(f_{n- 2}\)\(f_n\)分别对齐.

构造\(xF(x)\),相当于把无限合式向右移动一位,构造 \(x^2F(x)\) , 相当于把无限合式右移 \(2\) 位.

n 0 1 2 3 4
\(F(x)\) \(f_0 x^0\) \(f_1 x^1\) \(f_2 x^2\) \(f_3 x^3\) \(f_4x^4\)
\(xF(x)\) 无0次项 \(f_0 x^1\) \(f_1 x^2\) \(f_2 x^3\) \(f_3x^4\)
\(x^2F(x)\) 无0次项 无1次项 \(f_0 x^2\) \(f_1 x^3\) \(f_2x^4\)

这时考虑\(F(x) = xF(x) - x^2F(x)\)是否成立,显然对于\(n = 2\)以上均成立,考虑 \(n = 1,0\)两项.

可得新恒等关系:

\[\large F(x) = x^2F(x) + xF(x) + x \]

于是 :

\[\large F(x) = \frac{1}{1 - x - x^2} \]

那么如何求出通项 ?

考虑待定系数法 :

\[\large\begin{aligned} \frac{1}{1 - x - x^2} &= \frac{A}{1 - ax} + \frac{B}{1 - bx}\\ \frac{1}{1 - x - x^2} &= \frac{A - Abx + B - aBx}{(1 - ax)(1 - bx)}\\ \end{aligned}\]

于是列出方程组 :

\[\large \left\{\begin{matrix} &A + B = 0\\ &-Ab - aB = 0\\ &a + b = 1\\ &ab = -1 \end{matrix}\right. \]

求解即可

\[\large \left\{\begin{matrix} &A = \frac{1}{\sqrt{5}}\\ &B = -\frac{1}{\sqrt{5}}\\ &a = \frac{1 + \sqrt{5}}{2}\\ &b = \frac{1 - \sqrt{5}}{2} \end{matrix}\right. \]

可以发现 \(a\)是著名的 黄金分割 ,这时候可以记 \(a\)\(\phi\)\(b\)\(\hat\phi\)

于是 :

\[\large F(x) = \frac{1}{\sqrt{5}}\left(\frac{1}{1 - \phi x} - \frac{1}{1 - \hat\phi x}\right) \]

根据幂级数展开,得到 :

\[\large\begin{aligned} &\frac{1}{\sqrt{5}}\left(\frac{1}{1 - \phi x} - \frac{1}{1 - \hat\phi x}\right) \\ &= \frac{1}{\sqrt{5}}\left( \sum_{n = 0}^{\infty} \phi^n x^n - \sum_{n = 0}^{\infty} \hat{\phi}^n x^n \right)\\ &= \sum_{n = 0}^{\infty} \frac{\phi^n - \hat\phi^n}{\sqrt{5}} x^n \end{aligned}\]

那么根据之前生成函数的定义,可知系数就是通项,于是 :

\[\large f_n = \frac{\phi^n - \hat\phi^n}{\sqrt{5}} \]

比起什么矩阵啊,特征方程啊,简单又好证,非常的套路化,可以套模板.

这就是生成函数的好处.

常用 OGF 与 OGF 变形方式

质数生成函数 (EGF)

狄利克雷生成函数 (DGF)

同余与乘法逆元

组合数学

醒醒,你连数都数不明白

期望与概率

posted @ 2022-01-26 16:35  AstatineAi  阅读(117)  评论(0编辑  收藏  举报