《高 等 数 学》1

一部分来源于 https://codeforces.com/blog/entry/118001,感谢 Proofy

欧拉函数

定义 \(\varphi(x) = \sum \limits_{i = 1}^x [\gcd(i, x) = 1]\)

基础性质:

  1. \(\varphi(p^k) = (p - 1)p^{k - 1}\),其中 \(p\) 是质数,\(k \ge 1\)

  2. \(\varphi(ab) = \varphi(a)\varphi(b)\)\(\gcd(a, b) = 1\)

应用

欧拉函数的基础应用是求 \(\sum \limits_{i = 1}^n \sum \limits_{j = i}^n \gcd(i, j)\)(虽然这坨东西也有不同的推法,但都要应用到欧拉函数)。

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

\[= \sum \limits_{k = 1}^n k \sum \limits_{i = 1}^{n} \sum \limits_{j = 1}^{n} [\gcd(i, j) = k] \]

\[= \sum \limits_{k = 1}^n k \sum \limits_{i = 1}^{\lfloor \frac{n}{k} \rfloor} \sum \limits_{j = 1}^{\lfloor \frac{n}{k} \rfloor} [\gcd(i, j) = 1] \]

\[= \sum \limits_{k = 1}^n k \sum \limits_{i = 1}^{\lfloor \frac{n}{k} \rfloor} \varphi(i) \]

然后你暴力就可以做掉 \(n \le 10^6(O(n \log n))\),加个前缀和就可以做掉 \(n \le 10^7(O(n))\)

注意到推这个的同时我们还推出了 \(\sum \limits_{i = 1}^n \sum \limits_{j = i}^n [\gcd(i, j) = k]\) 的快速解法。

为啥 \(\sum \limits_{i = 1}^n \frac{n}{i} = O(n \log n)\)

\[\frac{n}{1} + \frac{n}{2} + \frac{n}{3} + \cdots + \frac{n}{n} \]

\[= n(\frac{1}{1} + \frac{1}{2} + \frac{1}{3} + \cdots + \frac{1}{n}) \]

考虑 \(\dfrac{1}{1} + \dfrac{1}{2} + \dfrac{1}{3} + \cdots\),可以放大成 \(\dfrac{1}{1} + 2\dfrac{1}{2} + 4\dfrac{1}{4} + \cdots\),所以 \(\dfrac{1}{1} + \dfrac{1}{2} + \dfrac{1}{3} + \cdots + \dfrac{1}{n} = O(\log n)\)

乘以 \(n\) 就是 \(O(n \log n)\)

整除分块

Lemma 1:\(\lfloor \dfrac{n}{i} \rfloor\) 至多有 \(O(\sqrt{n})\) 个值。

证明:对于 \(i \ge \sqrt{n}\)\(\lfloor \dfrac{n}{i} \rfloor\) 至多有 \(\sqrt{n}\) 个值,再加上 \(i < \sqrt{n}\),总共 \(O(\sqrt{n})\)

Lemma 2:设 \(l\) 是最小的 \(x\) 满足 \(\lfloor \dfrac{n}{x} \rfloor = c\)\(r\) 是最大的 \(x\) 满足 \(\lfloor \dfrac{n}{x} \rfloor = c\),则 \(r = \lfloor \frac{n}{\lfloor \frac{n}{l} \rfloor} \rfloor\)

然后你就可以用这两个 Lemma 去写题了。

exgcd

假设 \(ax_1 + by_1 = \gcd(a, b), bx_2 + (a \bmod b)y_2 = \gcd(b, a \bmod b)\)

显然有 \(ax_1 + by_1 = bx_2 + (a \bmod b)y_2\)

变换一下,有 \(ax_1 + by_1 = bx_2 + (a - b \lfloor \dfrac{a}{b} \rfloor)y_2\)

\(ax_1 + by_1 = bx_2 + ay_2 - b \lfloor \dfrac{a}{b} \rfloor y_2\)

\(ax_1 + by_1 = ay_2 + b(x_2 - \lfloor \dfrac{a}{b} \rfloor y_2)\)

得到 \(x_1 = y_2, y_1 = x_2 - \lfloor \dfrac{a}{b} \rfloor y_2\)

然后你就可以用这个玩意求 \(ax+by = \gcd(a, b)\) 的解了。

posted @ 2024-07-20 11:31  hhc0001  阅读(19)  评论(0)    收藏  举报