数论专题 by zj

A

考虑每个细菌的移动方式为一条链加一个环,且最多有 \(4\) 种在陷阱上的方式。\(4^K\) 枚举所有情况,暴力解方程即可。

使用 exgcd 合并两个同余方程。

B

\(g\)\(m\) 的原根,\(x \equiv g^{X} \pmod {\varphi(m)}\)\(y \equiv g^Y \pmod {\varphi(m)}\)

显然有解的充要条件是:\(\gcd (X,\varphi(m)) \mid \gcd(Y,\varphi(m))\)

而容易知道阶为 \(\frac{\varphi(m)}{\gcd(X,\varphi(m))}\),所以直接使用阶来刻画这个式子,即 \(\text{ord}_m y \mid \text{ord}_m x\)

阶可以直接试除法得到。

C

?原来询问是错的会直接跳出去啊。

把数用阶替代。每询问一个数,如果在 \(S\) 中就会返回其所有因数。

所以阶相同且在 \(S\) 中不存在倍数的数都会被算一遍,每一个独立处理一下贡献就行。

D

注意到 \(F_i=a F_{i-1} + b F_i\),且 \(F\) 的循环节长度为 \(O(m)\),所以预处理所有的 \(\dfrac{F_{i-1}}{F_i}\) 即可处理 \(p\) 为质数的情况。(特判 \(F_i=0\)\(F_{i-1}=0\)

先不妨设 \(\gcd(a,b) = 1\),得到 \(m'\)。然后你想算 \((\frac{b}{a})_{m'}\),出现的 corner case 是 \(\gcd(a,m') \neq 1\)。而显然有 \(\gcd(a,m') \mid \gcd(F_i,m')\)。显然由于 \(\gcd(F_i,F_{i-1})=1\) 所以 \(\gcd(F_i,a) \mid \gcd(a,m')\),发现恰好相等。再除掉一个就可以算乘法逆元了。

本质是:如果 \(ab \equiv cd \pmod m\),且 \(\gcd(a,c) = \gcd(b,d)=1\),则 \(\gcd(m,a) = \gcd(d,m)\)\(\gcd(m,b) = \gcd(c,m)\)

所以暴力处理一下就好了,复杂度似乎是 \(O(m \ln m)\) 的但是又巨大常数,我不好说。

E

莫斯科街景平衡点,后面忘了。

F

即求

\[[x^n] \prod_{i=1}^m \dfrac{1}{1-(ui+v)x} \]

将其进行部分分式分解,得到

\[\sum_{i=1}^m \dfrac{w_i}{1-(ui+v)x} \]

将上面的通分,得到

\[\sum_{i=1}^m w_i \prod_{j \neq i} [1-(uj+v)x] \]

考虑令 \(x = \dfrac{1}{ui+v}\),带入得到

\[w_i \prod_{j \neq i} (1 - \dfrac{uj+v}{ui+v}) = 1 \]

很容易算出 \(w_i\)

一些经典结论

Wilson 定理

对于质数 \(p\),有 \((p-1)! \equiv 1 \pmod p\);对于 \(\ge 4\) 的合数 \(v\),有 \((v-1)! \equiv 0 \pmod v\)

对于 \(q=p^k\),定义 \((q!)_p\)\(< q\) 的、与 \(p\) 互质数的乘积。

则当 \(p > 2\) 的时候,\((q!)_p \equiv -1 \pmod q\);当 \(p=2\)\(k \ge 3\) 的时候,\((q!)_p \equiv 1 \pmod q\)

在线 \(O(1)\) 逆元

当时觉得很困难,现在觉得非常简单。

核心思想是,找到 \(xy \equiv k \pmod p\),其中 \(k \le p^{\frac{2}{3}}\)。这样预处理 \(k\) 的逆元,有 \(x^{-1} \equiv y k^{-1} \pmod p\)

\(B=p^{\frac{1}{3}}\),令 \(x=uB+v\),我们希望 \(uBy + vy \le p^{\frac{2}{3}}\)。如果我们控制 \(y \le p^{\frac{1}{3}}\) 那么 \(vy \le p^{\frac{2}{3}}\),所以你只需要控制 \(uBy \le p^{\frac{2}{3}}\),而每个 \(u\) 只会对应一个 \(y\) 全预处理出来就好了。

对于每个 \(y\),考虑 \(yB \le p^{\frac{2}{3}}\)。我们枚举 \(p^{\frac{2}{3}}\)\(u\) 是不现实的,但是发现 \(uyB \bmod p\) 可以分为 \(p^{\frac{1}{3}}\) 段,每一段内可以用一些均摊啥的做到 \(O(p^{\frac{2}{3}})\)

狄利克雷卷积

有一个很深刻的事实就是,我们可以 \(O(\ln \ln n)\) 去处理一个函数卷上 \(\mu\)\(I\)。而 \(Id\) 实际上也能卷,你在处理高维前缀和的时候稍微处理一下就行。那么你也可以卷 \(\varphi\) 了。拿他去做半在线狄利克雷卷积,可以做到 \(O(n \ln \ln n)\)(但是似乎有点吃函数性质。)

\(\mu * I = e\),这就是莫比乌斯反演;\(\varphi * I = Id\),这就是欧拉反演。之前的 gcd 矩阵就用了欧拉反演(它特别适用于处理 gcd 的时候,钦定公因数 \(d\) 并且把 \(\varphi(d)\) 加到答案里面。)

定义两个积性函数相乘为其点值对应相乘,比如 \((fg)(n) = f(n)g(n)\)。那么如果知道 \(a*b=c\),其中 \(*\) 是狄利克雷卷积,则对于任何积性函数 \(d\) 都有 \((ad)*(bd) = cd\)。这为其他的一些积性函数(比如 \(id\varphi(id)\))提供了便利(方便你设计杜教筛的函数。)

杜教筛

你要求 \(S(n) = \sum_{i=1}^n f(i)\)。如果存在数论函数 \(g\) 使得 \(f*g=h\) 前缀和是好算的。

那么 \(H(n) = \sum_{i=1}^n h(i) = \sum_{ij \le n} f(i)g(j)\)

经典的是整除分块,有 \(H(n) = S(1) + \sum_{i=2}^n g(i) S(\lfloor \frac{n}{i} \rfloor)\);而算这种东西实际上有的时候可以使用 Dirichlet 双曲线法求(相对整除分块的优势是,少了一般的除法。)。

直接计算是 \(O(n^{0.75})\) 的。而如果你有预处理的能力(在低于 \(O(n^{1.5})\) 的复杂度完成预处理)可以平衡到 \(O(n^{\frac{2}{3}}\square^{\frac{1}{3}})\)

Min_25 筛

对于积性函数 \(f\),如果存在函数 \(g\) 满足:

  • \(g\) 是若干完全积性函数的和;
  • 每个完全积性函数可以快速求和(比如多项式);
  • 对于质数 \(p\)\(f(p)=g(p)\)

\(f(p^c)\) 可以快速求值。那么 \(f\) 可以在 \(O(\dfrac{n^{0.75}}{\log n})\) 的复杂度内求解。

第一步,求解 \(S(m) = \sum_{i=1}^m [i \text{ is prime}] f(i)\),其中 \(m = \lfloor \frac{n}{i} \rfloor\)

\(S_p(m) = \sum_{i=1}^m [i \text{ is prime or } i's \text{ smallest factor} \ge p]\),容易递推(注意 \(p^2 \ge m\) 的时就是 \(S(m)\))。

\(T_p(m) = \sum_{i=1}^m [i \text{ is prime or } i's \text{ smallest factor} \le p]\),发现仍然容易递推。

G

有两种看待问题的方法。

一个是考虑写成矩阵,那就是给你两个行向量 \(x\)\(y\),以及一个可逆矩阵 \(A\)。让你求出最小的 \(k\) 使得 \(x A^k = y\)(在 \(\mathbb F_2\) 内完成运算)。记 \(k=iB+j\)\(B\) 是你的块长。那么 \(x A^{iB} = y A^{-j}\),预处理所有的 \(y A^{-j}\) 即可。

还有一种是考虑多项式,然后变成求最小的 \(k\) 使得 \(x^k \equiv -1 \pmod {S(x)}\)

这道题是用矩阵 + BSGS 求解线性递推的模板题,阿巴阿巴。

显然 \(A^{2^k}\) 可以直接倍增算。

H

考虑钦定 \(\gcd\)\(d\)。然后把序列按照 \(d\) 分块跑一遍 KMP 即可。

I

暴力复杂度是 \(O(k m^{0.75})\),感觉还行啊(似乎常数有点大?)。

这题大概就想让我们在 \(O(n)\) 或类似的复杂度内求出 \(1\)\(n\) 的答案。(必须低于 \(n^{1.5}\)

整除莫比乌斯反演:若 \(f(n) = \sum_{i=1}^n t(i) g(\lfloor \frac{n}{i} \rfloor)\),那么 \(g(n) = \sum_{i=1}^n \mu(i) t(i) f(\lfloor \frac{n}{i} \rfloor)\)要求 \(t\) 是完全积性函数,且 \(t(1) = 1\)。证明需要用到一个重要的结论:只有 \(n\)块筛是有用的。而且,\(\lfloor \dfrac{\lfloor \frac{n}{i} \rfloor}{j} \rfloor = \lfloor \dfrac{n}{ij} \rfloor\)

所以你稍加处理一下,惊奇的发现

\[F_k(n) = \sum_{i=1}^n F_{k-1} (\lfloor \frac{n}{i} \rfloor) \mu(i) \]

然后你发现 \(F_k(n) - F_k(n-1)\) 只需要关注那些 \(i \mid n\)\(i\),记为 \(G(i) = F_{k}(i)-F_k(i-1)\)。然后你发现 \(\Delta F = \Delta G * \mu\)

这实在是太神奇了。这个题有一个启发就是,如果你在求和号里面看到了整除分块,不妨想一想差分,因为 \(\lfloor \frac{n}{i} \rfloor\) 这个东西的差分就很好看。

J

先处理一下这个式子,发现是

\[\dfrac{f(a,a+b)}{a(a+b)} = \dfrac{f(a,b)}{ab} = \dfrac{f(b,a)}{ba} \]

容易知道这个式子只和 \(\gcd(a,b)\) 有关。所以问题变为:动态维护数组 \(v\),并计算

\[\sum_{i=1}^k v_i \sum_{x=1}^{\lfloor \frac{k}{i} \rfloor} \sum_{y=1}^{\lfloor \frac{k}{i} \rfloor} [\gcd(x,y)=1] xy \]

使用值域分块维护 \(v\) 的前缀和,那么相当于你要预处理

\[\sum_{x=1}^k \sum_{y=1}^k [\gcd(x,y)=1]xy \]

这种式子还是考虑差分,只需要计算

\[\sum_{x=1}^k [\gcd(x,y)=1] x \]

这个就随便做了。

类欧和万欧

类欧处理问题是这样的思想:考虑解决问题 \(solve(a,c)\)。尝试处理以下两件事情:

  1. 把问题转化为 \(solve(a \bmod c,c)\)
  2. 把问题转化为 \(solve(c,a)\)

这样既可以辗转相除,在 \(O(\log)\) 的复杂度内解决问题。一般来说,前者都是比较简单的,我们主要处理后面那个问题。

L

问题是

\[f(a,b,c,n) = \min_{x=0}^{n} (ax+b) \bmod c \]

显然可以让 \(0 \le a < c\)\(a=0\) 容易处理。

假设现在在 \(p\),那么下一次有用的一定是 \(p+ka\) 恰好超过 \(c\)

也就是说,是

\[p + \lceil \dfrac{c-p}{a} \rceil a - c \]

略加推导,得到这个式子实际上是 \((p-c) \bmod a\)。这样起点、步长、次数都确定了,我们转化成了一个子问题。

但是有一个头疼的问题,你并不是 \((a,c) \to (c,a)\),而是 \((a,c) \to (-c,a)\),这是能卡的(取 \((a,c)\) 为相邻的两个整数)。

但是这个 \(c\) 你可以把负号扔到 \(x\) 上,然后再把 \(x\) 的界利用 \(b\) 进行平移。

一个神奇的想法:二分答案 \(\ge v\),则等价于

\[\sum_{i=l}^r \lfloor \frac{ai+b}{c} \rfloor = \sum_{i=l}^r \lfloor \frac{ai+b-v}{c} \rfloor \]

可惜复杂度有一点爆。

万能欧几里得

考虑这样一个事情:\(solve(a,b,c,A,B,n)\)\(A\)\(B\) 是两个具有结合律的操作。现在你要考虑 \(0 < x \le n\) 的每一个 \(x\)\(b<c\),这个很重要)。这条直线如果和 \(x=...\) 碰上就进行 \(A\) 操作,和 \(y=...\) 碰上就进行 \(B\) 操作。如果碰到了整点,就先 \(B\)\(A\)

考虑两个操作:\(a \leftarrow a \bmod c\)。发现每个 \(A\) 之前,一定会多执行 \(\lfloor \frac{a}{c} \rfloor\)\(B\),也就是:

\[solve(a \bmod c,b,c,B^{\lfloor \frac{a}{c} \rfloor}A,B) \]

另一个事情是交换 \(a\)\(c\)。这个可以通过坐标轴翻转实现。

image

由于要满足 \(y\)\(1\)\(m\) 的形式,我们分成 \(3\) 段。第一段和最后一段只有操作 \(A\),中间重新建立坐标系之后操作 \(A\)\(B\) 的地位互换。

但是有一个问题是在 \(A\)\(B\) 在同一个点遇上的话必须先是 \(B\) 后是 \(A\)。事实上我感觉这可以通过记录一个 \(01\) 变量来实现。但是更简单的是往上平移 \(\dfrac{1}{c}\) 的长度。

然后你的快速幂复杂度大概是 \(\sum \log \dfrac{a_{i+1}}{a_i}\),最终还是 \(O(\log V)\)。(要乘上信息合并的复杂度。)

比如上一道题就可以用历史和来实现。

注意到这里并没有对模数的变换,而只是对把 \(AB\) 进行变换。

勒让德符号

\((\dfrac{a}{p})\)\(a\)\(p\) 的勒让德记号,可以用来刻画二次剩余。

具体来说,\(x^2 \equiv a \pmod p\) 的解数等于 \((\dfrac{a}{p})+1\)。则

  • \((\dfrac{a}{p}) \equiv a^{\frac{p-1}{2}} \pmod p\)
  • \(\sum_i (\dfrac{a}{p}) = 0\)
  • 如果 \(p \not \mid a\)\((\dfrac{a^2}{p}) = 1\)
  • \(f(x) = (\dfrac{x}{p})\) 是完全积性函数。

可以用来推导一些东西。

二次互反律:\((\dfrac{p}{q}) (\dfrac{q}{p}) = (-1)^{\frac{(p-1)(q-1)}{4}}\)

N

先考虑 \(p\) 是奇质数的情况。

答案是:

\[\sum_{a=0}^{p-1} (\dfrac{a}{p}+1)(\dfrac{x-a}{p}+1) \]

拆开之后最关键的是计算

\[\sum_{a=0}^{p-1} (\dfrac{a(x-a)}{p}) = \sum_{a=1}^{p-1} (\dfrac{\frac{x}{a}-1}{p}) \]

然后 \(\frac{x}{a}\) 是可以构成缩系的(特判 \(x=0\)),发现求和也是容易的。

如果 \(p\) 是若干奇质数的乘积,使用中国剩余定理合并即可。

O

这题最关键的想法是:如何刻画三元组合法。

\([x_i=x_j=x_k] = \dfrac{[x_i=x_j]+[x_i=x_k]+[x_j=x_k]-1}{2}\)

\([x_i=x_j] = x_ix_j + (1-x_i)(1-x_j)\)

所以在不限制 \(i<j<k\) 而是 \(i+k \equiv 2j \pmod p\),那么就是非常好算的。

而这个 corner case 最多在长度为 \(2t\) 的区间中出现。

使用前缀和之类的技巧容易计算某个区间里头合法三元组的个数,那么结束了。

P

感觉有点像 Hensel's Lemma,先摆烂了。

posted @ 2025-06-25 09:33  M2GA  阅读(34)  评论(0)    收藏  举报