数论分块
对于形如
\[\sum_{i=1}^nf(i)g(\lfloor\frac{n}{i}\rfloor)
\]
的式子,我们可以发现 \(\lfloor\dfrac{n}{i}\rfloor\) 的值可以分成若干块,具体的,设上一块的右边界为 \(r'\),则当前块的左边界 \(l=r'+1\),右边界 \(r=\left\lfloor\dfrac{n}{\left\lfloor\dfrac{n}{l}\right\rfloor}\right\rfloor\)。块数为 \(O(\sqrt n)\) 量级。
code:
LL S(LL n) {
LL s = 0;
for (LL l = 1, r; l <= n; l = r + 1) {
r = n / (n / l);
s += (SumF(r) - SumF(l - 1)) * G(n / l);
}
return s;
}
扩展:
多维数论分块
如果式子形如
\[\sum_{i=1}^nf(i)g(\lfloor\frac{a_1}{i}\rfloor,\lfloor\frac{a_2}{i}\rfloor,\cdots,\lfloor\frac{a_k}{i}\rfloor)
\]
在取总块右边界的时候把 \(k\) 个块的右边界取 \(\min\) 即可。块的量级为 \(O(k\sqrt{a})\)。
LL S(LL n) {
LL s = 0;
for (LL l = 1, r; l <= n; l = r + 1) {
r = INT64_MAX;
for (int i = 1; i <= k; ++i) {
r = min(r, a[i] / (a[i] / l));
}
s += (SumF(r) - SumF(l - 1)) * G(a[1] / l, a[2] / l, ..., a[k] / l);
}
return s;
}
多维嵌套数论分块
式子形如
\[\begin{aligned}
S_k(n)&=\sum_{i=1}^ng_k(i)S_{k-1}(\lfloor\frac{n}{i}\rfloor)\\
S_0(n)&=f(n)
\end{aligned}
\]
直接递归,总块数量级为 \(O(n^{1-2^{-k}})\)。
LL S(LL n, int k) {
if (k == 0) {
return F(n);
}
LL s = 0;
for (LL l = 1, r; l <= n; l = r + 1) {
r = n / (n / l);
s += (SumG(r, k) - SumG(l - 1, k)) * S(n / l, k - 1);
}
return s;
}
积性函数
定义
如果一个数论函数 \(f(n)\) 满足对于所有 \(\gcd(i,j)=1\),有 \(f(ij)=f(i)f(j)\),那么 \(f(n)\) 被称为积性函数。
特别的,如果对于所有 \(i,j\) 都有 \(f(ij)=f(i)f(j)\),那么 \(f(n)\) 被称为完全积性函数。
性质
如果 \(f(n)\) 和 \(g(n)\) 都是积性函数,那么下列函数也是积性函数:
\[\begin{aligned}
h(x)&=f(x^p)\\
h(x)&=f(x)^p\\
h(x)&=f(x)g(x)\\
h(x)&=\sum_{d\mid x}f(d)g(x/d)
\end{aligned}
\]
常见积性函数
- 单位函数 \(\epsilon(n)=[n=1]\),完全积性函数。
- 幂函数 \(\operatorname{id}^k(n)=n^k\),\(\operatorname{id}^1\) 一般简记为 \(\operatorname{id}\),完全积性函数。
- 常数函数 \(1(n)=1\),也记作 \(\operatorname{I}\),完全积性函数。
- 因数个数函数 \(\operatorname{d}(n)=\displaystyle\sum_{d\mid n}1=\displaystyle\sum_{d=1}^n[d\mid n]\)。
- 除数函数 \(\sigma_k(n)=\displaystyle\sum_{d\mid n}d^k\),\(k=1\) 时为因数和函数,\(k=0\) 时为因数个数函数。
- 欧拉函数 \(\varphi(n)=\displaystyle\sum_{i=1}^n[\gcd(i,n)=1]\)。
- 莫比乌斯函数 \(\mu(n)\),设 \(n=\displaystyle\prod_{i=1}^kp_i^{e_i}\),那么有 \(\mu(n)=\begin{cases}
1 & \text{if } n=1\\
0 & \text{if } e_i>1\\
(-1)^k & \text{otherwise.}
\end{cases}\)。
线性筛
我们在小学二年级就知道线性筛可以在 \(O(n)\) 的时间内筛出 \(\le n\) 的质数,但其实它还可以筛积性函数。我们只要知道积性函数 \(f\) 在质数的幂处的取值,就能用线性筛筛出 \(f\)。
f[1] = 1;
for (int i = 2; i <= n; ++i) {
if (!v[i]) {
p.push_back(i), f[i] = /*f 在质数 i 处的取值*/;
sp[i] = i, bp[i] = i, kp[i] = 1;
}
for (int j : p) {
int k = i * j;
if (k > n) {
break;
}
v[k] = 1;
if (i % j) {
f[k] = f[i] * f[j];
sp[k] = j, bp[k] = j, kp[k] = 1;
} else {
if (sp[i] == i) {
f[k] = /*f 在质数的幂 bp[i]^(kp[i]+1)=k 处的取值*/;
} else {
f[k] = f[i / sp[i]] * f[j * sp[i]];
}
sp[k] = sp[i] * j, bp[k] = bp[i], kp[k] = kp[i] + 1;
break;
}
}
}
狄利克雷卷积
定义
对于两个数论函数 \(f,g\),定义它们的狄利克雷卷积为:
\[(f*g)(n)=\sum_{d\mid n}f(d)g(n/d)
\]
性质
- 满足交换律、结合律、分配律。
- \(\epsilon\) 为狄利克雷卷积的单位元,即有 \((f*\epsilon)(n)=\displaystyle\sum_{d\mid n}f(d)\epsilon(n/d)=f(n)\)。
- \(\mu\) 为狄利克雷卷积中 \(1\) 的逆元,即 \(f*1=h\iff f=h*\mu\)。
- 若 \(f,g\) 为积性函数,则 \(f*g\) 为积性函数。
- \(\epsilon=\mu*1=\displaystyle\sum_{d\mid n}\mu(d)\)。
- \(1*\operatorname{id}^k=\sigma_k\)。
- \(\varphi*1=\operatorname{id}\),\(\varphi=\mu*\operatorname{id}\)。
狄利克雷(前/后)缀(和/差分)
我们经常会遇到求 \(f*1\) 和 \(f*\mu\) 的前缀和这类的问题。虽然可以手动分析,但有时候却分析不出来。这时候就要用到狄利克雷前缀和(或其他的)了。
以下讲解的是狄利克雷前缀和,等价于卷 \(1\),其他情况类似,差分等价于卷 \(\mu\)。
它的本质是做多维前缀和,即对每个质数 \(p\),把 \(f_p\) 加到 \(f_{ip}\) 上。正确性可以感性理解。
模板题:P5495 Dirichlet 前缀和。
前缀和:
for (int i : p) {
for (int j = 1; i * j <= n; ++j) {
f[i * j] += f[j];
}
}
后缀和(实际上是做倍数卷积,即 \(g(n)=\displaystyle\sum_{n\mid d}f(d)\)):
for (int i : p) {
for (int j = n / i; j >= 1; --j) {
f[j] += f[i * j];
}
}
前缀差分:
for (int i : p) {
for (int j = n / i; j >= 1; --j) {
f[i * j] -= f[j];
}
}
后缀差分(实际上是做倍数卷积,即 \(g(n)=\displaystyle\sum_{n\mid d}\mu(d/n)f(d)\)):
for (int i : p) {
for (int j = 1; i * j <= n; ++j) {
f[j] -= f[i * j];
}
}
杜教筛
题目类型
求 \(S(n)=\displaystyle\sum_{i=1}^nf(i)\),其中 \(f\) 是积性函数。
算法解决
显然可以线性筛,时间复杂度 \(O(n)\),不够优秀。
考虑构造积性函数 \(h,g\),使得 \(f*g=h\)。
那么有:
\[\begin{aligned}
\sum_{i=1}^nh(i)
&= \sum_{i=1}^n\sum_{d\mid i}f(i/d)g(d)\\
&= \sum_{d=1}^ng(d)\sum_{d\mid i}f(i/d)\\
&= \sum_{d=1}^ng(d)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}f(i)\\
&= \sum_{d=1}^ng(d)S(\lfloor\frac{n}{d}\rfloor)\\
\end{aligned}
\]
把 \(S(n)\) 单独拎出来,有:
\[S(n)=\frac{\displaystyle\sum_{i=1}^nh(i)-\sum_{d=2}^ng(d)S(\lfloor\frac{n}{d}\rfloor)}{g(1)}
\]
于是我们只要能做到快速计算 \(h\) 和 \(g\) 的前缀和即可。记忆化实现,时间复杂度 \(O(n^{3/4})\);线性筛预处理 \(\le n^{2/3}\) 的部分可以做到 \(O(n^{2/3})\)。
以下是实现:
\(\varphi(i)\) 的前缀和
有 \(\varphi * 1=\operatorname{id}\),代码实现如下:
LL Sphi(int n) {
if (n < kM) {
return phi[n];
}
auto p = fphi.find(n);
if (p != fphi.end()) {
return p->second;
}
auto &f = fphi[n];
f = 1LL * n * (n + 1) / 2;
for (LL l = 2, r; l <= n; l = r + 1) {
r = n / (n / l);
f -= (r - l + 1) * Sphi(n / l);
}
return f;
}
\(\mu(i)\) 的前缀和
有 \(\mu * 1=\epsilon\),代码实现如下:
LL Smu(int n) {
if (n < kM) {
return mu[n];
}
auto p = fmu.find(n);
if (p != fmu.end()) {
return p->second;
}
auto &f = fmu[n];
f = 1;
for (LL l = 2, r; l <= n; l = r + 1) {
r = n / (n / l);
f -= (r - l + 1) * Smu(n / l);
}
return f;
}
P4213 【模板】杜教筛(Sum) 代码:
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
using LL = long long;
const int kM = 1664511;
int t, n;
LL phi[kM], mu[kM];
bool v[kM];
vector<LL> p;
unordered_map<LL, LL> fphi, fmu;
LL Sphi(LL n) {
if (n < kM) {
return phi[n];
}
auto p = fphi.find(n);
if (p != fphi.end()) {
return p->second;
}
auto &f = fphi[n];
f = n * (n + 1) / 2;
for (LL l = 2, r; l <= n; l = r + 1) {
r = n / (n / l);
f -= (r - l + 1) * Sphi(n / l);
}
return f;
}
LL Smu(LL n) {
if (n < kM) {
return mu[n];
}
auto p = fmu.find(n);
if (p != fmu.end()) {
return p->second;
}
auto &f = fmu[n];
f = 1;
for (LL l = 2, r; l <= n; l = r + 1) {
r = n / (n / l);
f -= (r - l + 1) * Smu(n / l);
}
return f;
}
int main() {
ios_base::sync_with_stdio(0), cin.tie(0);
phi[1] = mu[1] = 1;
for (LL i = 2; i < kM; ++i) {
if (!v[i]) {
phi[i] = i - 1, mu[i] = -1;
p.push_back(i);
}
for (LL j : p) {
if (i * j >= kM) {
break;
}
v[i * j] = 1;
if (i % j) {
phi[i * j] = phi[i] * phi[j], mu[i * j] = mu[i] * mu[j];
} else {
phi[i * j] = phi[i] * j, mu[i * j] = 0;
break;
}
}
}
for (LL i = 2; i < kM; ++i) {
phi[i] += phi[i - 1], mu[i] += mu[i - 1];
}
for (cin >> t; t--; ) {
cin >> n;
cout << Sphi(n) << ' ' << Smu(n) << '\n';
}
return 0;
}
莫比乌斯变换/反演
常见反演形式
形式一
\([x=1]=\displaystyle\sum_{d\mid x}\mu(d)\),即 \(\epsilon=\mu*1\)。
更常见的形式是 \([\gcd(i,j)=1]=\displaystyle\sum_{d\mid\gcd(i,j)}\mu(d)=\sum_{d\mid i}\sum_{d\mid j}\mu(d)\)
形式二
如果有
\[f(n)=\sum_{d\mid n}g(d)
\]
(即 \(f=g*1\))
那么有
\[g(n)=\sum_{d\mid n}\mu(d)f(n/d)
\]
(即 \(g=f*\mu\))
形式三
如果有
\[f(n)=\sum_{n\mid d}g(d)
\]
那么有
\[g(n)=\sum_{n\mid d}\mu(d/n)f(d)
\]
常见反演套路
以下默认 \(n\le m\)。
形式一
\[\begin{aligned}
&\sum_{i=1}^n\sum_{j=1}^mf(\gcd(i,j))\\
=&\sum_{d=1}^nf(d)\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=d]\\
=&\sum_{d=1}^nf(d)\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1}^{\lfloor m/d\rfloor}[\gcd(di,dj)=d]\\
=&\sum_{d=1}^nf(d)\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1}^{\lfloor m/d\rfloor}[\gcd(i,j)=1]\\
=&\sum_{d=1}^nf(d)\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1}^{\lfloor m/d\rfloor}\sum_{p\mid i}\sum_{p\mid j}\mu(p)\\
=&\sum_{d=1}^nf(d)\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)\sum_{i=1}^{\lfloor n/dp\rfloor}\sum_{j=1}^{\lfloor m/dp\rfloor}1\\
=&\sum_{d=1}^nf(d)\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)\lfloor n/dp\rfloor\lfloor m/dp\rfloor\\
\end{aligned}
\]
设 \(t=dp\),则
\[\begin{aligned}
&\sum_{d=1}^nf(d)\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)\lfloor n/dp\rfloor\lfloor m/dp\rfloor\\
=&\sum_{d=1}^nf(d)\sum_{t=1,d\mid t}^{n}\mu(t/d)\lfloor n/t\rfloor\lfloor m/t\rfloor\\
=&\sum_{t=1}^{n}\lfloor n/t\rfloor\lfloor m/t\rfloor\sum_{d\mid t}f(d)\mu(t/d)\\
=&\sum_{t=1}^{n}\lfloor n/t\rfloor\lfloor m/t\rfloor (f*\mu)(t)\\
\end{aligned}
\]
可以手动分析 \(f*\mu\),也可以无脑预处理然后数论分块,后一种的时间复杂度为 \(O(n\log\log n)-O(\sqrt{n})\)。
例题
题意
求
\[\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)\text{ is a prime}]
\]
思路
以下设 \(n\le m\)。
直接套上面的套路即可。
\[\begin{aligned}
&\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)\text{ is a prime}]\\
=&\sum_{t=1}^{n}\lfloor n/t\rfloor\lfloor m/t\rfloor\sum_{d\mid t}[d\text{ is a prime}]\mu(t/d)
\end{aligned}
\]
可以发现后面的东西可以线性筛,时间复杂度 \(O(n+t\sqrt{n})\)。
多倍经验:P2257 YY的GCD,P2568 GCD。
题意
求
\[\sum_{i=i_1}^{i_2}\sum_{j=j_1}^{j_2}\gcd(i,j)
\]
思路
以下设 \(n\le m\)。
设
\[S(n,m)=\sum_{i=1}^{n}\sum_{j=1}^{m}\gcd(i,j)
\]
直接套上面的式子得:
\[\begin{aligned}
S(n,m)
&=\sum_{i=1}^n\lfloor\frac{n}{i}\rfloor\lfloor\frac{m}{i}\rfloor(\operatorname{id}*\mu)(i)\\
&=\sum_{i=1}^n\lfloor\frac{n}{i}\rfloor\lfloor\frac{m}{i}\rfloor\varphi(i)\\
\end{aligned}
\]
线性筛后数论分块即可,答案为 \(S(i_2,j_2)-S(i_2,j_1-1)-S(i_1-1,j_2)+S(i_1-1,j_1-1)\)。
题意
求
\[\sum_{i=1}^n\sum_{j=1}^m2\gcd(i,j)-1
\]
思路
显然有
\[\sum_{i=1}^n\sum_{j=1}^m2\gcd(i,j)-1=2\left(\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j)\right)-nm
\]
直接套上面的式子即可。
题意
求
\[\sum_{i=1}^n\sum_{j=i+1}^n\gcd(i,j)
\]
思路
\[\begin{aligned}
&\sum_{i=1}^n\sum_{j=i+1}^n\gcd(i,j)\\
=&\frac{\left(\displaystyle\sum_{i=1}^n\sum_{j=1}^n\gcd(i,j)\right)-\dfrac{n(n+1)}{2}}{2}
\end{aligned}
\]
直接套上面的式子即可。
题意
求
\[\sum_{i=1}^n\operatorname{lcm}(i,n)
\]
思路
\[\begin{aligned}
&\sum_{i=1}^n\operatorname{lcm}(i,n)\\
=&\sum_{i=1}^n\frac{in}{\gcd(i,n)}\\
=&n\sum_{i=1}^n\frac{i}{\gcd(i,n)}\\
=&n\sum_{d=1}^n\sum_{i=1}^n\frac{i}{d}[\gcd(i,n)=d]\\
=&n\sum_{d\mid n}\sum_{i=1}^{n/d}i[\gcd(i,n/d)=1]\\
\end{aligned}
\]
发现后面那堆东西意义是与 \(n/d\) 互质的数的和,即 \(\dfrac{n/d\cdot\varphi(n/d)}{2}\),线性筛后枚举 \(d\) 对倍数转移预处理即可。
注:注意特判 \(n/d=1\) 的情况。
题意
求
\[\sum_{i=1}^n\sum_{j=1}^md(ij)
\]
思路
首先需要知道约数个数函数 \(d\) 的一个性质:
\[d(ij)=\sum_{x\mid i}\sum_{y\mid j}[\gcd(x,y)=1]
\]
证明:
对 \(x\) 的质因数分解中的一项 \(p^a\) 和 \(y\) 对应的 \(p^b\),因为 \(x,y\) 互质,故必有一项为 \(p^0\)。
- \(b=0\):则对应的 \(ij\) 的因子的对应项为 \(p^a\)。
- \(a=0\):设 \(i\) 的对应项为 \(p^k\),则对应的 \(ij\) 的因子的对应项为 \(p^{k+b}\)。
容易发现这种表示方法不重。故得证。
以下设 \(n\le m\)。
由性质有
\[\begin{aligned}
\sum_{i=1}^n\sum_{j=1}^md(ij)
&=\sum_{i=1}^n\sum_{j=1}^m\sum_{x\mid i}\sum_{y\mid j}[\gcd(x,y)=1]\\
&=\sum_{x=1}^n\sum_{y=1}^m\lfloor n/x\rfloor\lfloor m/y\rfloor[\gcd(x,y)=1]\\
&=\sum_{x=1}^n\sum_{y=1}^m\lfloor n/x\rfloor\lfloor m/y\rfloor\sum_{d\mid x,d\mid y}\mu(d)\\
&=\sum_{d=1}^n\mu(d)\sum_{d\mid x}^n\lfloor n/x\rfloor\sum_{d\mid y}^m\lfloor m/y\rfloor\\
&=\sum_{d=1}^n\mu(d)\sum_{x=1}^{\lfloor n/d\rfloor}\lfloor\lfloor n/d\rfloor/x\rfloor\sum_{y=1}^{\lfloor m/d\rfloor}\lfloor\lfloor m/d\rfloor/y\rfloor\\
\end{aligned}
\]
预处理 \(\displaystyle\sum_{i=1}^n\lfloor n/i\rfloor\) 后数论分块即可。
题意
求
\[\prod_{i=1}^n\prod_{j=1}^n\frac{\operatorname{lcm}(i,j)}{\gcd(i,j)}
\]
思路
原式即为
\[\prod_{i=1}^n\prod_{j=1}^n\frac{ij}{\gcd(i,j)^2}
\]
由于 \(\prod\) 的优秀性质,我们可以把这个式子拆成两部分:
\[\frac{\displaystyle\prod_{i=1}^n\prod_{j=1}^n ij}{(\displaystyle\prod_{i=1}^n\prod_{j=1}^n \gcd(i,j))^2}
\]
分子部分
有
\[\begin{aligned}
\prod_{i=1}^n\prod_{j=1}^n ij
&=\prod_{i=1}^ni^nn!\\
&=(n!)^n\cdot(n!)^n\\
&=(n!)^{2n}
\end{aligned}
\]
分母部分
有
\[\begin{aligned}
\prod_{i=1}^n\prod_{j=1}^n \gcd(i,j)
&=\prod_{d=1}^n\prod_{i=1}^n\prod_{j=1}^n [\gcd(i,j)=d]d\\
&=\prod_{d=1}^nd^{\sum_{i=1}^n\sum_{j=1}^n [\gcd(i,j)=d]}\\
\end{aligned}
\]
看指数部分,有:
\[\begin{aligned}
\sum_{i=1}^n\sum_{j=1}^n [\gcd(i,j)=d]
&=\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1}^{\lfloor n/d\rfloor} [\gcd(i,j)=1]\\
&=2\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1}^i [\gcd(i,j)=1]-1\\
&=2\sum_{i=1}^{\lfloor n/d\rfloor}\varphi(i)-1\\
\end{aligned}
\]
预处理 \(\varphi\) 前缀和即可。
注意指数部分是对 \(104857601-1=104857600\) 取模。
题意
求
\[\sum_{i=1}^n\sum_{j=1}^n\sum_{p=1}^{\lfloor n/j\rfloor}\sum_{q=1}^{\lfloor n/j\rfloor}[\gcd(i,j)=1][\gcd(p,q)=1]
\]
思路
有
\[\begin{aligned}
&\sum_{i=1}^n\sum_{j=1}^n\sum_{p=1}^{\lfloor n/j\rfloor}\sum_{q=1}^{\lfloor n/j\rfloor}[\gcd(i,j)=1][\gcd(p,q)=1]\\
=&\sum_{i=1}^n\sum_{j=1}^n\sum_{p=1}^{n}\sum_{q=1}^{n}[\gcd(i,j)=1][\gcd(p,q)=j]\\
=&\sum_{i=1}^n\sum_{p=1}^{n}\sum_{q=1}^{n}[\gcd(i,p,q)=1]\\
=&\sum_{i=1}^n\sum_{p=1}^{n}\sum_{q=1}^{n}\sum_{d\mid i,d\mid p,d\mid q}\mu(d)\\
=&\sum_{d=1}^n\mu(d)\sum_{d\mid i}\sum_{d\mid p}\sum_{d\mid q}1\\
=&\sum_{d=1}^n\mu(d)\lfloor\frac{n}{d}\rfloor^3\\
\end{aligned}
\]
杜教筛求 \(\mu\) 的前缀和即可,时间复杂度 \(O(n^{2/3})\)。
数论分块套杜教筛复杂度证明:
可以发现由于杜教筛内部是用数论分块实现的,所以只要筛一次 \(n\),就会把数论分块要用到的值全部筛出来,时间复杂度为 \(O(n^{2/3}+n^{1/2})=O(n^{2/3})\)。
题意
求
\[\left(\sum_{i=1}^n\sum_{j=1}^nij\gcd(i,j)\right)\bmod p
\]
思路
有
\[\begin{aligned}
&\sum_{i=1}^n\sum_{j=1}^nij\gcd(i,j)\\
=&\sum_{d=1}^nd^3\sum_{i=1}^n\sum_{j=1}^n(i/d)(j/d)[\gcd(i,j)=d]\\
=&\sum_{d=1}^nd^3\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1}^{\lfloor n/d\rfloor}ij[\gcd(i,j)=1]\\
=&\sum_{d=1}^nd^3\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1}^{\lfloor n/d\rfloor}ij\sum_{p\mid i,p\mid j}\mu(p)\\
=&\sum_{d=1}^nd^3\sum_{p=1}^n\mu(p)\sum_{i=1,p\mid i}^{\lfloor n/d\rfloor}i\sum_{j=1,p\mid j}^{\lfloor n/d\rfloor}j\\
=&\sum_{d=1}^nd^3\sum_{p=1}^n\mu(p)\left(\sum_{i=1,p\mid i}^{\lfloor n/d\rfloor}i\right)^2\\
\end{aligned}
\]
设 \(S(n)=\dfrac{n(n+1)}{2}\)。有
\[\begin{aligned}
&\sum_{d=1}^nd^3\sum_{p=1}^n\mu(p)\left(\sum_{i=1,p\mid i}^{\lfloor n/d\rfloor}i\right)^2\\
=&\sum_{d=1}^nd^3\sum_{p=1}^n\mu(p)\left(p\sum_{i=1,p\mid i}^{\lfloor n/d\rfloor}i/p\right)^2\\
=&\sum_{d=1}^nd^3\sum_{p=1}^n\mu(p)p^2\left(\sum_{i=1}^{\lfloor n/dp\rfloor}i\right)^2\\
=&\sum_{d=1}^nd^3\sum_{p=1}^n\mu(p)p^2S(\lfloor n/dp\rfloor)^2\\
\end{aligned}
\]
设 \(t=dp\),有
\[\begin{aligned}
&\sum_{d=1}^nd^3\sum_{p=1}^n\mu(p)p^2S(\lfloor n/dp\rfloor)^2\\
=&\sum_{t=1}^nS(\lfloor n/t\rfloor)^2\sum_{d=1,d\mid t}^nd^3\mu(t/d)(t/d)^2\\
=&\sum_{t=1}^nS(\lfloor n/t\rfloor)^2\sum_{d=1,d\mid t}^nd\mu(t/d)t^2\\
=&\sum_{t=1}^nS(\lfloor n/t\rfloor)^2t^2\sum_{d=1,d\mid t}^nd\mu(t/d)\\
=&\sum_{t=1}^nS(\lfloor n/t\rfloor)^2t^2\varphi(t)\\
\end{aligned}
\]
注意到 \(n^2\varphi(n)*\operatorname{id}^2=\operatorname{id}^3\),可以使用杜教筛。
关于如何发现上面那个式子。
首先直接设 \(n^2\varphi(n)*f(n)=g(n)\),展开有
\[g(n)=\sum_{d\mid n}d^2\varphi(d)f(n/d)
\]
我们知道 \(\varphi*1=\operatorname{id}\),所以想办法把 \(d^2\) 消掉,于是自然想到了 \(f=\operatorname{id}^2\)。
于是有
\[\begin{aligned}
g(n)
&=\sum_{d\mid n}d^2\varphi(d)(n/d)^2\\
&=n^2\sum_{d\mid n}\varphi(d)\\
&=n^2\cdot n\\
&=n^3\\
\end{aligned}
\]
题意
求
\[\sum_{a_1=L}^R\sum_{a_2=L}^R\cdots\sum_{a_n=L}^R[\gcd_{i=1}^na_i=k]
\]
思路
设 \(l=\lceil L/k\rceil,r=\lfloor R/k\rfloor\),有
\[\begin{aligned}
&\sum_{a_1=L}^R\sum_{a_2=L}^R\cdots\sum_{a_n=L}^R[\gcd_{i=1}^na_i=k]\\
=&\sum_{a_1=l}^r\sum_{a_2=l}^r\cdots\sum_{a_n=l}^r[\gcd_{i=1}^na_i=1]\\
=&\sum_{a_1=l}^r\sum_{a_2=l}^r\cdots\sum_{a_n=l}^r\sum_{d\mid a_i}\mu(d)\\
=&\sum_{d=1}^r\mu(d)\sum_{a_1=l,d\mid a_1}^r\sum_{a_2=l,d\mid a_2}^r\cdots\sum_{a_n=l,d\mid a_n}^r1\\
=&\sum_{d=1}^r\mu(d)\left(\lfloor r/d\rfloor-\lfloor (l-1)/d\rfloor\right)^n\\
\end{aligned}
\]
杜教筛维护前缀和,数论分块即可。
题意
求
\[\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j)^k
\]
对 \(10^9+7\) 取模的结果。
思路
直接套式子得:
\[\sum_{t=1}^{n}\lfloor n/t\rfloor\lfloor m/t\rfloor\sum_{d\mid t}d^k\mu(t/d)
\]
后面那坨东西做个狄利克雷前缀差分就好了。
题意
求
\[\sum_{i=1}^n\sum_{j=1}^n\gcd(i,j)^{i+j}
\]
对 \(p\) 取模的值。
思路
\[\begin{aligned}
&\sum_{i=1}^n\sum_{j=1}^n\gcd(i,j)^{i+j}\\
=&\sum_{d=1}^n\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1}^{\lfloor n/d\rfloor}d^{d(i+j)}[\gcd(i,j)=1]\\
=&\sum_{d=1}^n\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1}^{\lfloor n/d\rfloor}d^{d(i+j)}\sum_{p\mid i,p\mid j}^n\mu(p)\\
=&\sum_{d=1}^n\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)\sum_{i=1}^{\lfloor n/dp\rfloor}\sum_{j=1}^{\lfloor n/dp\rfloor}d^{dp(i+j)}\\
\end{aligned}
\]
设 \(t=dp\),有
\[\begin{aligned}
&\sum_{d=1}^n\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)\sum_{i=1}^{\lfloor n/dp\rfloor}\sum_{j=1}^{\lfloor n/dp\rfloor}d^{dp(i+j)}\\
=&\sum_{d=1}^n\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)\sum_{i=1}^{\lfloor n/t\rfloor}\sum_{j=1}^{\lfloor n/t\rfloor}d^{t(i+j)}\\
=&\sum_{d=1}^n\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)\sum_{i=1}^{\lfloor n/t\rfloor}(d^t)^i\sum_{j=1}^{\lfloor n/t\rfloor}(d^t)^j\\
=&\sum_{d=1}^n\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)\left(\sum_{i=1}^{\lfloor n/t\rfloor}(d^t)^i\right)^2\\
\end{aligned}
\]
设 \(S(b,n)=\displaystyle\sum_{i=1}^nb^i=\frac{b^{n+1}-b}{b-1}\),特别的,当 \(b=1\) 时,\(S(1,n)=n\)。
那么原式就是
\[\sum_{d=1}^n\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)S(d^t,\lfloor n/t\rfloor)^2
\]
直接暴力算即可,时间复杂度 \(O(n\log n)\)。
题意
求
\[\sum_{i=1}^n\sum_{j=1}^m\operatorname{lcm}(i,j)
\]
对 \(20101009\) 取模的值。
思路
以下设 \(n\le m\)。
\[\begin{aligned}
&\sum_{i=1}^n\sum_{j=1}^m\operatorname{lcm}(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}^n\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1}^{\lfloor m/d\rfloor}dij[\gcd(i,j)=1]\\
=&\sum_{d=1}^nd\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1}^{\lfloor m/d\rfloor}ij\sum_{p\mid i,p\mid j}\mu(p)\\
=&\sum_{d=1}^nd\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)p^2\sum_{i=1}^{\lfloor n/dp\rfloor}\sum_{j=1}^{\lfloor m/dp\rfloor}ij\\
\end{aligned}
\]
设 \(S(n)=\displaystyle\sum_{i=1}^ni=\dfrac{n(n+1)}{2},t=dp\),有
\[\begin{aligned}
&\sum_{d=1}^nd\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)p^2\sum_{i=1}^{\lfloor n/dp\rfloor}\sum_{j=1}^{\lfloor m/dp\rfloor}ij\\
=&\sum_{d=1}^nd\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)p^2S(\lfloor n/t\rfloor)S(\lfloor m/t\rfloor)\\
=&\sum_{t=1}^n\sum_{d\mid t}d\mu(t/d)(t/d)^2S(\lfloor n/t\rfloor)S(\lfloor m/t\rfloor)\\
=&\sum_{t=1}^ntS(\lfloor n/t\rfloor)S(\lfloor m/t\rfloor)\sum_{d\mid t}\mu(t/d)(t/d)\\
=&\sum_{t=1}^ntS(\lfloor n/t\rfloor)S(\lfloor m/t\rfloor)\sum_{d\mid t}\mu(d)d\\
\end{aligned}
\]
看后面那部分 \(f(n)=\displaystyle\sum_{d\mid n}\mu(d)d\),显然有 \(f(p)=1-p\) 和 \(f(p^k)=f(p)=1-p\),于是可以线性筛预处理后整除分块。
题意
求
\[\sum_{i=1}^n\sum_{j=1}^n(i+j)^k\mu^2(\gcd(i,j))\gcd(i,j)
\]
对 \(998244353\) 取模的值。
思路
地狱绘图
\[\begin{aligned}
&\sum_{i=1}^n\sum_{j=1}^n(i+j)^k\mu^2(\gcd(i,j))\gcd(i,j)\\
=&\sum_{d=1}^n\sum_{i=1}^n\sum_{j=1}^n(i+j)^k\mu^2(d)d[\gcd(i,j)=d]\\
=&\sum_{d=1}^n\mu^2(d)d\sum_{i=1}^n\sum_{j=1}^n(i+j)^k[\gcd(i,j)=d]\\
=&\sum_{d=1}^n\mu^2(d)d\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1}^{\lfloor n/d\rfloor}(di+dj)^k[\gcd(i,j)=1]\\
=&\sum_{d=1}^n\mu^2(d)d^{k+1}\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1}^{\lfloor n/d\rfloor}(i+j)^k\sum_{p\mid i,p\mid j}\mu(p)\\
=&\sum_{d=1}^n\mu^2(d)d^{k+1}\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)p^k\sum_{i=1}^{\lfloor n/dp\rfloor}\sum_{j=1}^{\lfloor n/dp\rfloor}(i+j)^k\\
\end{aligned}
\]
设 \(f\) 为 \(\operatorname{id}^k\) 的前缀和,\(g\) 为 \(f\) 的前缀和,\(S(n)=\displaystyle\sum_{i=1}^n\sum_{j=1}^n(i+j)^k\),有
\[\begin{aligned}
S(n)
&=\sum_{i=1}^nf(n+i)-f(i)\\
&=g(2n)-g(n)-g(n)\\
&=g(2n)-2g(n)\\
\end{aligned}
\]
于是有
\[\begin{aligned}
&\sum_{d=1}^n\mu^2(d)d^{k+1}\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)p^k\sum_{i=1}^{\lfloor n/dp\rfloor}\sum_{j=1}^{\lfloor n/dp\rfloor}(i+j)^k\\
=&\sum_{d=1}^n\mu^2(d)d^{k+1}\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)p^kS(\lfloor n/dp\rfloor)\\
\end{aligned}
\]
设 \(t=dp\),有
\[\begin{aligned}
&\sum_{d=1}^n\mu^2(d)d^{k+1}\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)p^kS(\lfloor n/t\rfloor)\\
=&\sum_{t=1}^nS(\lfloor n/t\rfloor)\sum_{d\mid t}\mu^2(d)d^{k+1}\mu(t/d)(t/d)^k\\
=&\sum_{t=1}^nS(\lfloor n/t\rfloor)t^k\sum_{d\mid t}d\mu^2(d)\mu(t/d)\\
\end{aligned}
\]
设 \(h(n)=\displaystyle\sum_{d\mid n}d\mu^2(d)\mu(n/d)\),由于它是若干个积性函数卷起来,所以也是积性函数,因此我们分类讨论 \(h(p^k)\) 即可。
- \(k=1\):此时,\(h(p)=\mu(p)+p\mu^2(p)=p-1\)。
- \(k=2\):此时,\(h(p^2)=\mu(p^2)+p\mu^2(p)\mu(p)+p^2\mu^2(p^2)=-p\)。
- \(k>2\):此时,对于 \(h(p^k)\) 中的任意一项 \(p^i\mu^2(p^i)\mu(p^{k-i})\),都有 \(i\ge 2\) 或 \(k-i\ge 2\),故 \(f(p^k)=0\)。
这时,我们就能用线性筛预处理 \(h\) 和 \(\operatorname{id}^k\)。然后数论分块即可。
改一下可以过 P6222 「P6156 简单题」加强版。
题意
求
\[\prod_{i=l}^r\prod_{j=l}^r\operatorname{lcm}(i,j)^{\operatorname{lcm}(i,j)}
\]
对 \(32465177\) 取模的值。
思路
设 \(\displaystyle f(n,m)=\prod_{i=1}^n\prod_{j=1}^m\operatorname{lcm}(i,j)^{\operatorname{lcm}(i,j)}\),答案显然为 \(\dfrac{f(r,r)f(l-1,l-1)}{f(r,l-1)f(l-1,r)}\),由于 \(f(n,m)=f(m,n)\),以下不妨设 \(n\le m\)。
\[\begin{aligned}
f(n,m)
&=\prod_{i=1}^n\prod_{j=1}^m\operatorname{lcm}(i,j)^{\operatorname{lcm}(i,j)}\\
&=\prod_{i=1}^n\prod_{j=1}^m\frac{ij}{\gcd(i,j)}^{\frac{ij}{\gcd(i,j)}}\\
&=\prod_{d=1}^n\prod_{i=1}^n\prod_{j=1}^m\frac{ij}{d}^{\frac{ij}{d}[\gcd(i,j)=d]}\\
&=\prod_{d=1}^n\prod_{i=1}^{\lfloor n/d\rfloor}\prod_{j=1}^{\lfloor m/d\rfloor}ijd^{ijd[\gcd(i,j)=1]}\\
&=\prod_{d=1}^n\prod_{i=1}^{\lfloor n/d\rfloor}\prod_{j=1}^{\lfloor m/d\rfloor}ijd^{ijd\sum_{p\mid i,p\mid j}\mu(p)}\\
&=\prod_{d=1}^n\prod_{i=1}^{\lfloor n/d\rfloor}\prod_{j=1}^{\lfloor m/d\rfloor}\prod_{p\mid i,p\mid j}ijd^{ijd\mu(p)}\\
&=\prod_{d=1}^n\prod_{p=1}^{\lfloor n/d\rfloor}\prod_{i=1}^{\lfloor n/dp\rfloor}\prod_{j=1}^{\lfloor m/dp\rfloor}(ijdp^2)^{ijdp^2\mu(p)}\\
\end{aligned}
\]
设 \(t=dp\),有
\[\begin{aligned}
&\prod_{d=1}^n\prod_{p=1}^{\lfloor n/d\rfloor}\prod_{i=1}^{\lfloor n/dp\rfloor}\prod_{j=1}^{\lfloor m/dp\rfloor}(ijdp^2)^{ijdp^2\mu(p)}\\
=&\prod_{d=1}^n\prod_{p=1}^{\lfloor n/d\rfloor}\prod_{i=1}^{\lfloor n/t\rfloor}\prod_{j=1}^{\lfloor m/t\rfloor}(ijtp)^{ijtp\mu(p)}\\
=&\prod_{t=1}^n\prod_{p\mid t}\prod_{i=1}^{\lfloor n/t\rfloor}\prod_{j=1}^{\lfloor m/t\rfloor}(ijtp)^{ijtp\mu(p)}\\
=&\prod_{t=1}^n\left(\prod_{p\mid t}\left(\prod_{i=1}^{\lfloor n/t\rfloor}\prod_{j=1}^{\lfloor m/t\rfloor}(ijtp)^{ij}\right)^{p\mu(p)}\right)^t\\
=&\prod_{t=1}^n\left(\prod_{p\mid t}\left(\prod_{i=1}^{\lfloor n/t\rfloor}\prod_{j=1}^{\lfloor m/t\rfloor}(ij)^{ij}\cdot\prod_{i=1}^{\lfloor n/t\rfloor}\prod_{j=1}^{\lfloor m/t\rfloor}(tp)^{ij}\right)^{p\mu(p)}\right)^t\\
\end{aligned}
\]
设 \(S(n,m)=\displaystyle\prod_{i=1}^n\prod_{j=1}^m(ij)^{ij}\),\(s(n)=\displaystyle\sum_{i=1}^ni=\dfrac{n(n+1)}{2}\),\(g(n)=\displaystyle\prod_{i=1}^ni^i\),有
\[\begin{aligned}
S(n,m)
&=\prod_{i=1}^n\prod_{j=1}^m(ij)^{ij}\\
&=\prod_{i=1}^n\prod_{j=1}^mi^{ij}\cdot j^{ij}\\
&=\prod_{i=1}^n\prod_{j=1}^m(i^i)^j\cdot \prod_{i=1}^n\prod_{j=1}^m(j^j)^i\\
&=\prod_{i=1}^n(i^i)^{s(m)}\cdot \prod_{i=1}^ng(m)^i\\
&=g(n)^{s(m)}\cdot g(m)^{s(n)}\\
\end{aligned}
\]
另一边,我们有:
\[\begin{aligned}
\prod_{i=1}^{n}\prod_{j=1}^{m}x^{ij}
&=x^{\sum_{i=1}^n\sum_{j=1}^mij}\\
&=x^{s(n)s(m)}
\end{aligned}
\]
代入原式,得:
\[\begin{aligned}
&\prod_{t=1}^n\left(\prod_{p\mid t}\left(\prod_{i=1}^{\lfloor n/t\rfloor}\prod_{j=1}^{\lfloor m/t\rfloor}(ij)^{ij}\cdot\prod_{i=1}^{\lfloor n/t\rfloor}\prod_{j=1}^{\lfloor m/t\rfloor}(tp)^{ij}\right)^{p\mu(p)}\right)^t\\
=&\prod_{t=1}^n\left(\prod_{p\mid t}\left(S(\lfloor n/t\rfloor,\lfloor m/t\rfloor)\cdot(tp)^{s(\lfloor n/t\rfloor)s(\lfloor m/t\rfloor)}\right)^{p\mu(p)}\right)^t\\
=&\prod_{t=1}^n\left(\prod_{p\mid t}S(\lfloor n/t\rfloor,\lfloor m/t\rfloor)^{p\mu(p)}\cdot p^{s(\lfloor n/t\rfloor)s(\lfloor m/t\rfloor)p\mu(p)}\cdot t^{s(\lfloor n/t\rfloor)s(\lfloor m/t\rfloor)p\mu(p)}\right)^t\\
\end{aligned}
\]
设 \(h(n)=\displaystyle\sum_{p\mid n}p\mu(p)\),\(w(n)=\displaystyle\prod_{d\mid n}d^{d\mu(d)}\),有:
\[\begin{aligned}
&\prod_{t=1}^n\left(\prod_{p\mid t}S(\lfloor n/t\rfloor,\lfloor m/t\rfloor)^{p\mu(p)}\cdot p^{s(\lfloor n/t\rfloor)s(\lfloor m/t\rfloor)p\mu(p)}\cdot t^{s(\lfloor n/t\rfloor)s(\lfloor m/t\rfloor)p\mu(p)}\right)^t\\
=&\prod_{t=1}^n\left(S(\lfloor n/t\rfloor,\lfloor m/t\rfloor)^{h(t)}\cdot w(t)^{s(\lfloor n/t\rfloor)s(\lfloor m/t\rfloor)}\cdot t^{s(\lfloor n/t\rfloor)s(\lfloor m/t\rfloor)h(t)}\right)^t\\
\end{aligned}
\]
再设 \(r(n)=\displaystyle(w(n)\cdot n^{h(n)})^n\),有
\[\begin{aligned}
&\prod_{t=1}^n\left(S(\lfloor n/t\rfloor,\lfloor m/t\rfloor)^{h(t)}\cdot w(t)^{s(\lfloor n/t\rfloor)s(\lfloor m/t\rfloor)}\cdot t^{s(\lfloor n/t\rfloor)s(\lfloor m/t\rfloor)h(t)}\right)^t\\
=&\prod_{t=1}^nS(\lfloor n/t\rfloor,\lfloor m/t\rfloor)^{h(t)t}\cdot r(t)^{s(\lfloor n/t\rfloor)s(\lfloor m/t\rfloor)}\\
\end{aligned}
\]
至此,我们可以通过数论分块解决问题。
整理一下要用的函数:
- \(s(n)=\displaystyle\sum_{i=1}^ni=\dfrac{n(n+1)}{2}\):位于指数上,可 \(O(1)\) 计算,模 \(p-1\)。
- \(g(n)=\displaystyle\prod_{i=1}^ni^i\):位于底数上,可 \(O(n\log n)\) 预处理,模 \(p\)。
- \(S(n,m)=g(n)^{s(m)}\cdot g(m)^{s(n)}\):位于底数上,可 \(O(\log p)\) 计算,模 \(p\)。
- \(h(n)=\displaystyle\sum_{p\mid n}p\mu(p)\):积性函数,位于指数上,可 \(O(n)\) 预处理(线性筛),模 \(p-1\)。
- \(w(n)=\displaystyle\prod_{d\mid n}d^{d\mu(d)}\):位于底数上,可以 \(O(n\log n)\) 预处理,模 \(p\)。
- \(r(n)=\displaystyle(w(n)\cdot n^{h(n)})^n\):位于底数上,可以 \(O(\log p)\) 直接计算,模 \(p\)。
再整理一下要预处理的东西:
- \(g(n)=\displaystyle\prod_{i=1}^ni^i\):直接预处理 \(i^i\) 后前缀积。
- \(h(n)=\displaystyle\sum_{p\mid n}p\mu(p)\):使用线性筛预处理,\(h(p^k)=1-p\)。
- \(w(n)=\displaystyle\prod_{d\mid n}d^{d\mu(d)}\):枚举 \(d\) 对倍数贡献即可。
- \(h(t)t\) 的前缀和,对 \(p-1\) 取模。
- \(r(t)\) 的前缀积和逆元,对 \(p\) 取模。
题意
求
\[\prod_{i=1}^n\prod_{j=1}^mf_{\gcd(i,j)}
\]
对 \(10^9+7\) 取模的值。其中 \(f\) 是斐波那契数列。
思路
以下设 \(n\le m\)。
\[\begin{aligned}
&\prod_{i=1}^n\prod_{j=1}^mf_{\gcd(i,j)}\\
=&\prod_{d=1}^n\prod_{i=1}^n\prod_{j=1}^mf_d^{[\gcd(i,j)=d]}\\
=&\prod_{d=1}^nf_d^{\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=d]}\\
=&\prod_{d=1}^nf_d^{\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1}^{\lfloor m/d\rfloor}[\gcd(i,j)=1]}\\
=&\prod_{d=1}^nf_d^{\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)\lfloor n/dp\rfloor\lfloor m/dp\rfloor}\\
\end{aligned}
\]
设 \(t=dp\),有
\[\begin{aligned}
&\prod_{d=1}^nf_d^{\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)\lfloor n/dp\rfloor\lfloor m/dp\rfloor}\\
=&\prod_{d=1}^n\prod_{p=1}^{\lfloor n/d\rfloor}f_d^{\mu(p)\lfloor n/t\rfloor\lfloor m/t\rfloor}\\
=&\prod_{t=1}^n\left(\prod_{d\mid t}f_d^{\mu(t/d)}\right)^{\lfloor n/t\rfloor\lfloor m/t\rfloor}\\
\end{aligned}
\]
设 \(F(n)=\displaystyle\prod_{d\mid n}f_d^{\mu(n/d)}\),则
\[\begin{aligned}
&\prod_{t=1}^n\left(\prod_{d\mid t}f_d^{\mu(t/d)}\right)^{\lfloor n/t\rfloor\lfloor m/t\rfloor}\\
=&\prod_{t=1}^nF(t)^{\lfloor n/t\rfloor\lfloor m/t\rfloor}\\
\end{aligned}
\]
\(F(t)\) 显然可以直接 \(O(n(\log p+\log n))\) 预处理,数论分块即可。
题意
求
\[\sum_{i=i_1}^{i_2}\sum_{j=j_1}^{j_2}\gcd(i,j)
\]
对 \(10^9+7\) 取模的值。多组数据。
\(T\le 5\times 10^4\),\(\max(i_2),\max(j_2)\le 10^6\)。
思路
为方便,以下 \(i_1,j_1\) 均为原 \(i_1-1,j_1-1\)。
这道题目我们在之前已经见过一次了,设 \(S(n,m)=\displaystyle\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j)\),则 \(S(n,m)=\displaystyle\sum_{i=1}^n\varphi(i)\lfloor n/i\rfloor\lfloor m/i\rfloor\),答案即为 \(S(i_2,j_2)-S(i_1,j_2)-S(i_2,j_1)+S(i_1,j_1)\)。
但是这样常数太大,过不去。考虑优化。
首先可以发现 \(S(n,m)\) 是没必要的,我们直接看原式,设 \(n=\min(i_2,j_2)\),有
\[\begin{aligned}
&\sum_{i=i_1+1}^{i_2}\sum_{j=j_1+1}^{j_2}\gcd(i,j)\\
=&\sum_{d=1}^n\sum_{i=i_1+1}^{i_2}\sum_{j=j_1+1}^{j_2}d[\gcd(i,j)=d]\\
=&\sum_{d=1}^nd\sum_{i=\lceil (i_1+1)/d\rceil}^{\lfloor i_2/d\rfloor}\sum_{j=\lceil (j_1+1)/d\rceil}^{\lfloor j_2/d\rfloor}[\gcd(i,j)=1]\\
=&\sum_{d=1}^nd\sum_{i=\lfloor i_1/d\rfloor+1}^{\lfloor i_2/d\rfloor}\sum_{j=\lfloor j_1/d\rfloor+1}^{\lfloor j_2/d\rfloor}\sum_{p\mid i,p\mid j}\mu(p)\\
=&\sum_{d=1}^nd\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)\sum_{i=\lfloor i_1/dp\rfloor+1}^{\lfloor i_2/dp\rfloor}\sum_{j=\lfloor j_1/dp\rfloor+1}^{\lfloor j_2/dp\rfloor}1\\
=&\sum_{d=1}^nd\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)(\lfloor i_2/dp\rfloor-\lfloor i_1/dp\rfloor)(\lfloor j_2/dp\rfloor-\lfloor j_1/dp\rfloor)\\
\end{aligned}
\]
设 \(t=dp\),有
\[\begin{aligned}
&\sum_{d=1}^nd\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)(\lfloor i_2/dp\rfloor-\lfloor i_1/dp\rfloor)(\lfloor j_2/dp\rfloor-\lfloor j_1/dp\rfloor)\\
=&\sum_{d=1}^nd\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)(\lfloor i_2/t\rfloor-\lfloor i_1/t\rfloor)(\lfloor j_2/t\rfloor-\lfloor j_1/t\rfloor)\\
=&\sum_{t=1}^n(\lfloor i_2/t\rfloor-\lfloor i_1/t\rfloor)(\lfloor j_2/t\rfloor-\lfloor j_1/t\rfloor)\sum_{p\mid t}(t/p)\mu(p)\\
=&\sum_{t=1}^n\varphi(t)(\lfloor i_2/t\rfloor-\lfloor i_1/t\rfloor)(\lfloor j_2/t\rfloor-\lfloor j_1/t\rfloor)\\
\end{aligned}
\]
但是这样常数还是太大,过不去。
优化一:考虑预处理 \(1/n\)(浮点数下),把除法改成乘法,再逝当卡常就能过了
优化二:根号分治,设一个阈值 \(S\),对于 \(t\le S\),直接暴力算,对于 \(t>S\),数论分块。
至此终于能过了。
题意
求对于所有 \(1\le x\le n\),\(1\le y\le m\),有多少最简分数 \(\dfrac{x}{y}\) 满足 \(k\) 进制下的小数形式为纯循环小数。特别的,我们认为整数属于纯循环小数。
思路
首先显然要满足 \(\gcd(x,y)=1\)。设 \(\dfrac{x}{y}\) 的循环节位数为 \(l\),那么有
\[\begin{aligned}
\left\{\frac{x}{y}\right\}&=\left\{\frac{xk^l}{y}\right\}\\
\frac{x}{y}-\lfloor\frac{x}{y}\rfloor&=\frac{xk^l}{y}-\lfloor\frac{xk^l}{y}\rfloor\\
x-y\lfloor\frac{x}{y}\rfloor&=xk^l-y\lfloor\frac{xk^l}{y}\rfloor\\
x&\equiv xk^l\pmod y\\
k^l&\equiv 1\pmod y\\
\gcd(k,y)&=1\\
\end{aligned}
\]
最后一步(\(x^l\equiv 1\pmod m\iff \gcd(x,m)=1\))的证明:
- \(x^l\equiv 1\pmod m\gets \gcd(x,m)=1\):显然令 \(l=\varphi(m)\) 即可。
- \(x^l\equiv 1\pmod m\to \gcd(x,m)=1\):我们有 \(\gcd(x^l,m)=\gcd(x^l,x^l\bmod m)=\gcd(x^l,1)=1\),若 \(\gcd(x,m)\ne 1\),那么有 \(\gcd(x^l,m)\ne 1\),矛盾,故 \(\gcd(x,m)=1\)。
此时式子就成了
\[\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=1][\gcd(j,k)=1]
\]
求解这个式子即可。
我们有
\[\begin{aligned}
&\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=1][\gcd(j,k)=1]\\
=&\sum_{i=1}^n\sum_{j=1}^m[\gcd(j,k)=1]\sum_{p\mid i,p\mid j}\mu(p)\\
=&\sum_{p=1}^{\min(n,m)}\mu(p)\sum_{p\mid i}^n\sum_{p\mid j}^m[\gcd(j,k)=1]\\
=&\sum_{p=1}^{\min(n,m)}\mu(p)\lfloor\frac{n}{p}\rfloor\sum_{p\mid j}^m[\gcd(j,k)=1]\\
=&\sum_{p=1}^{\min(n,m)}\mu(p)\lfloor\frac{n}{p}\rfloor[\gcd(p,k)=1]\sum_{j=1}^{\lfloor m/p\rfloor}[\gcd(j,k)=1]\\
\end{aligned}
\]
设 \(f(n)=\displaystyle\sum_{i=1}^n[\gcd(i,k)=1]\),由于 \(\gcd(i+k,k)=\gcd(i,k)\),所以 \(\gcd(i,k)\) 是有一个长度为 \(k\) 的循环节的,那么有
\[f(n)=f(n\bmod k)+\lfloor n/k\rfloor f(k)
\]
这个式子是可以 \(O(k\log k)\) 预处理后 \(O(1)\) 算的。
那么有
\[\begin{aligned}
&\sum_{p=1}^{\min(n,m)}\mu(p)\lfloor\frac{n}{p}\rfloor[\gcd(p,k)=1]\sum_{j=1}^{\lfloor m/p\rfloor}[\gcd(j,k)=1]\\
=&\sum_{p=1}^{\min(n,m)}f(\lfloor m/p\rfloor)\lfloor\frac{n}{p}\rfloor\mu(p)[\gcd(p,k)=1]\\
\end{aligned}
\]
现在这个式子已经可以数论分块了,现在只剩预处理 \(\displaystyle\sum_{i=1}^n\mu(i)[\gcd(i,k)=1]\) 的问题了。
我们设 \(S(n)=\displaystyle\sum_{i=1}^n\mu(i)[\gcd(i,k)=1]\),那么有
\[\begin{aligned}
S(n)
&=\sum_{i=1}^n\mu(i)[\gcd(i,k)=1]\\
&=\sum_{i=1}^n[\gcd(i,k)=1]S(\lfloor n/i\rfloor)-\sum_{i=2}^n[\gcd(i,k)=1]S(\lfloor n/i\rfloor)
\end{aligned}
\]
只看前面部分,有
\[\begin{aligned}
&\sum_{i=1}^n[\gcd(i,k)=1]S(\lfloor n/i\rfloor)\\
=&\sum_{i=1}^n[\gcd(i,k)=1]\sum_{j=1}^{\lfloor n/i\rfloor}\mu(j)[\gcd(j,k)=1]\\
=&\sum_{i=1}^n\sum_{j=1}^{\lfloor n/i\rfloor}\mu(j)[\gcd(ij,k)=1]\\
=&\sum_{t=1}^n[\gcd(t,k)=1]\sum_{j\mid t}\mu(j)\\
=&\sum_{t=1}^n[\gcd(t,k)=1][t=1]\\
=&1\\
\end{aligned}
\]
于是有
\[S(n)=1-\sum_{i=2}^n[\gcd(i,k)=1]S(\lfloor n/i\rfloor)
\]
这个式子也可以数论分块。采用类似杜教筛的方法即可。
总时间复杂度为 \(O(k\log k+n^{2/3})\),证明参考数论分块套杜教筛复杂度证明。
题意
有一个表格 \(f(a,b)\),满足:
- \(f(a,b)=f(b,a)\)
- \(b\cdot f(a,a+b)=(a+b)\cdot f(a,b)\)
初始时 \(f(a,b)=ab\)。
有 \(m\) 次操作,每次操作会将 \(f(a_i,b_i)\) 修改为 \(x_i\),同时,你需要修改此次操作涉及到的格子,使得操作后仍满足上面两条条件。每次询问后,你需要输出 \(\displaystyle\sum_{x=1}^{k_i}\sum_{y=1}^{k_i}f(x,y)\),答案对 \(10^9+7\) 取模。
思路
首先有
\[\begin{aligned}
b\cdot f(a,a+b)&=(a+b)\cdot f(a,b)\\
ab\cdot f(a,a+b)&=a(a+b)\cdot f(a,b)\\
\frac{f(a,a+b)}{a(a+b)}&=\frac{f(a,b)}{ab}\\
\end{aligned}
\]
这是辗转相减法的形式,结合 \(f(a,b)=f(b,a)\),我们可以得到
\[f(a,b)=\frac{f(d,d)}{d^2}\cdot ab
\]
其中 \(d=\gcd(a,b)\)。
于是我们只要维护 \(f(d,d)\) 即可。设 \(g(d)=f(d,d)\)。
答案即为
\[\begin{aligned}
&\sum_{i=1}^k\sum_{j=1}^kf(i,j)\\
=&\sum_{i=1}^k\sum_{j=1}^k\frac{g(\gcd(i,j))}{\gcd(i,j)^2}\cdot ij\\
=&\sum_{d=1}^k\frac{g(d)}{d^2}\sum_{i=1}^k\sum_{j=1}^kij[\gcd(i,j)=d]\\
=&\sum_{d=1}^kg(d)\sum_{i=1}^{\lfloor k/d\rfloor}\sum_{j=1}^{\lfloor k/d\rfloor}ij[\gcd(i,j)=1]\\
=&\sum_{d=1}^kg(d)\sum_{p=1}^{\lfloor k/d\rfloor}\mu(p)p^2\sum_{i=1}^{\lfloor k/dp\rfloor}\sum_{j=1}^{\lfloor k/dp\rfloor}ij\\
\end{aligned}
\]
设 \(S(n)=\displaystyle\sum_{i=1}^n i=\dfrac{n(n+1)}{2}\),有
\[\begin{aligned}
&\sum_{d=1}^kg(d)\sum_{p=1}^{\lfloor k/d\rfloor}\mu(p)p^2\sum_{i=1}^{\lfloor k/dp\rfloor}\sum_{j=1}^{\lfloor k/dp\rfloor}ij\\
=&\sum_{d=1}^kg(d)\sum_{p=1}^{\lfloor k/d\rfloor}\mu(p)p^2S(\lfloor k/dp\rfloor)^2\\
\end{aligned}
\]
设 \(h(n)=\displaystyle\sum_{i=1}^n\mu(i)i^2S(\lfloor n/i\rfloor)^2\),有
\[\begin{aligned}
h(n)-h(n-1)
&=\sum_{i=1}^n\mu(i)i^2S(\lfloor n/i\rfloor)^2-\sum_{i=1}^{n-1}\mu(i)i^2S(\lfloor (n-1)/i\rfloor)^2\\
&=\sum_{i\mid n}\mu(i)i^2(S(n/i)^2-S(n/i-1)^2)\\
&=\sum_{i\mid n}\mu(i)i^2(n/i)^3\\
&=n^2\sum_{i\mid n}\mu(i)(n/i)\\
&=n^2\varphi(n)\\
\end{aligned}
\]
于是有
\[h(n)=\sum_{i=1}^n i^2\varphi(i)
\]
原式即为
\[\sum_{d=1}^kg(d)h(\lfloor k/d\rfloor)
\]
树状数组维护 \(g(n)\) 的前缀和,数论分块即可。时间复杂度 \(O(m\sqrt{n})\)。
题意
求
\[\prod_{i=1}^A\prod_{j=1}^B\prod_{k=1}^C\left(\frac{\operatorname{lcm}(i,j)}{\gcd(i,k)}\right)^{f(type)}
\]
其中 \(type\in \{0,1,2\}\),并且
\[\begin{aligned}
f(0)&=1\\
f(1)&=ijk\\
f(2)&=\gcd(i,j,k)
\end{aligned}
\]
答案对 \(p\) 取模。
思路
原式显然等于
\[\prod_{i=1}^A\prod_{j=1}^B\prod_{k=1}^C\left(\frac{ij}{\gcd(i,j)\gcd(i,k)}\right)^{f(type)}
\]
由于 \(\prod\) 的优良性质,我们仅需要求解下列两个式子:
\[\begin{aligned}
f_1(a,b,c)=\prod_{i=1}^a\prod_{j=1}^b\prod_{k=1}^ci^{f(type)}\\
f_2(a,b,c)=\prod_{i=1}^a\prod_{j=1}^b\prod_{k=1}^c\gcd(i,j)^{f(type)}\\
\end{aligned}
\]
答案即为
\[\frac{f_1(a,b,c)f_1(b,a,c)}{f_2(a,b,c)f_2(a,c,b)}
\]
\(f(0)=1\)
\[\begin{aligned}
f_1(a,b,c)&=\prod_{i=1}^a\prod_{j=1}^b\prod_{k=1}^ci\\
f_2(a,b,c)&=\prod_{i=1}^a\prod_{j=1}^b\prod_{k=1}^c\gcd(i,j)\\
\end{aligned}
\]
对于 \(f_1\),有
\[\begin{aligned}
f_1(a,b,c)
&=\prod_{i=1}^a\prod_{j=1}^b\prod_{k=1}^c i\\
&=\prod_{i=1}^ai^{bc}\\
&=(a!)^{bc}\\
\end{aligned}
\]
预处理即可做到 \(O(\log n)\) 计算。
对于 \(f_2\),设 \(n=\min(a,b)\),有
\[\begin{aligned}
f_2(a,b,c)
&=\prod_{i=1}^a\prod_{j=1}^b\prod_{k=1}^c\gcd(i,j)\\
&=\prod_{i=1}^a\prod_{j=1}^b\gcd(i,j)^c\\
&=\left(\prod_{d=1}^{n}d^{\sum_{i=1}^a\sum_{j=1}^b[\gcd(i,j)=d]}\right)^c\\
&=\left(\prod_{d=1}^{n}d^{\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)\lfloor a/dp\rfloor\lfloor b/dp\rfloor}\right)^c\\
&=\left(\prod_{d=1}^{n}\prod_{p=1}^{\lfloor n/d\rfloor}d^{\mu(p)\lfloor a/dp\rfloor\lfloor b/dp\rfloor}\right)^c\\
\end{aligned}
\]
设 \(t=dp\),有
\[\begin{aligned}
&\left(\prod_{d=1}^{n}\prod_{p=1}^{\lfloor n/d\rfloor}d^{\mu(p)\lfloor a/dp\rfloor\lfloor b/dp\rfloor}\right)^c\\
=&\left(\prod_{t=1}^{n}\left(\prod_{d\mid t}d^{\mu(t/d)}\right)^{\lfloor a/t\rfloor\lfloor b/t\rfloor}\right)^c\\
\end{aligned}
\]
中间那部分显然可以 \(O(n\log n)\) 预处理,然后就可以数论分块+快速幂做到 \(O(\sqrt{n}\log n)\)。
\(f(1)=ijk\)
\[\begin{aligned}
f_1(a,b,c)&=\prod_{i=1}^a\prod_{j=1}^b\prod_{k=1}^ci^{ijk}\\
f_2(a,b,c)&=\prod_{i=1}^a\prod_{j=1}^b\prod_{k=1}^c\gcd(i,j)^{ijk}\\
\end{aligned}
\]
对于 \(f_1\),有
\[\begin{aligned}
f_1(a,b,c)&=\prod_{i=1}^a\prod_{j=1}^b\prod_{k=1}^ci^{ijk}\\
&=\left(\prod_{i=1}^ai^i\right)^{S(b)S(c)}\\
\end{aligned}
\]
其中 \(S(n)=\displaystyle\sum_{i=1}^n i=\dfrac{n(n+1)}{2}\)。
可以 \(O(n)\) 预处理后 \(O(\log n)\) 处理单次询问。
对于 \(f_2\),设 \(n=\min(a,b)\),有
\[\begin{aligned}
f_2(a,b,c)
&=\prod_{i=1}^a\prod_{j=1}^b\prod_{k=1}^c\gcd(i,j)^{ijk}\\
&=\left(\prod_{i=1}^a\prod_{j=1}^b\gcd(i,j)^{ij}\right)^{S(c)}\\
&=\left(\prod_{d=1}^nd^{\sum_{i=1}^a\sum_{j=1}^bij[\gcd(i,j)=d]}\right)^{S(c)}\\
\end{aligned}
\]
先看指数,有
\[\begin{aligned}
&\sum_{i=1}^a\sum_{j=1}^bij[\gcd(i,j)=d]\\
=&d^2\sum_{i=1}^{\lfloor a/d\rfloor}\sum_{j=1}^{\lfloor b/d\rfloor}ij[\gcd(i,j)=1]\\
=&d^2\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)p^2\sum_{i=1}^{\lfloor a/dp\rfloor}i\sum_{j=1}^{\lfloor b/dp\rfloor}j\\
=&d^2\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)p^2S(\lfloor a/dp\rfloor)S(\lfloor b/dp\rfloor)\\
\end{aligned}
\]
代入原式,有
\[\begin{aligned}
&\left(\prod_{d=1}^nd^{\sum_{i=1}^a\sum_{j=1}^bij[\gcd(i,j)=d]}\right)^{S(c)}\\
&=\left(\prod_{d=1}^nd^{d^2\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)p^2S(\lfloor a/dp\rfloor)S(\lfloor b/dp\rfloor)}\right)^{S(c)}\\
&=\left(\prod_{d=1}^n\prod_{p=1}^{\lfloor n/d\rfloor}d^{d^2\mu(p)p^2S(\lfloor a/dp\rfloor)S(\lfloor b/dp\rfloor)}\right)^{S(c)}\\
\end{aligned}
\]
设 \(t=dp\),有
\[\begin{aligned}
&\left(\prod_{d=1}^n\prod_{p=1}^{\lfloor n/d\rfloor}d^{d^2\mu(p)p^2S(\lfloor a/dp\rfloor)S(\lfloor b/dp\rfloor)}\right)^{S(c)}\\
&=\left(\prod_{t=1}^n\left(\prod_{d\mid t}d^{d^2\mu(t/d)(t/d)^2}\right)^{S(\lfloor a/t\rfloor)S(\lfloor b/t\rfloor)}\right)^{S(c)}\\
&=\left(\prod_{t=1}^n\left(\prod_{d\mid t}d^{\mu(t/d)}\right)^{t^2S(\lfloor a/t\rfloor)S(\lfloor b/t\rfloor)}\right)^{S(c)}\\
\end{aligned}
\]
要预处理的东西和 \(type=0\) 差不多,数论分块可以做到 \(O(\sqrt{n}\log{n})\)
\(f(2)=gcd(i,j,k)\)
直接考虑原式,设 \(n=\min(a,b,c)\),取 \(\ln\) 有
\[\begin{aligned}
&\sum_{i=1}^a\sum_{j=1}^b\sum_{k=1}^c\ln\left(\frac{\operatorname{lcm}(i,j)}{\gcd(i,k)}\right)\gcd(i,j,k)\\
=&\sum_{d=1}^n\varphi(d)\sum_{i=1}^{\lfloor a/d\rfloor}\sum_{j=1}^{\lfloor b/d\rfloor}\sum_{k=1}^{\lfloor c/d\rfloor}\ln\left(\frac{\operatorname{lcm}(i,j)}{\gcd(i,k)}\right)\\
\end{aligned}
\]
再取 \(\exp\) 有
\[\begin{aligned}
&\prod_{d=1}^n\left(\prod_{i=1}^{\lfloor a/d\rfloor}\prod_{j=1}^{\lfloor b/d\rfloor}\prod_{k=1}^{\lfloor c/d\rfloor}\frac{\operatorname{lcm}(i,j)}{\gcd(i,k)}\right)^{\varphi(d)}\\
\end{aligned}
\]
可以发现中间部分就是 \(type=0\) 时的答案,数论分块套数论分块即可,时间复杂度 \(O(n^{3/4}\log n)\)。
题意
求
\[\sum_{i=1}^n\sum_{j=1}^m\varphi(ij)
\]
对 \(998244353\) 取模的值,多组询问。
思路
神仙题。
以下设 \(n\le m\)。
首先有一个经典结论:
\[\varphi(ij)\varphi(\gcd(i,j))=\varphi(i)\varphi(j)\gcd(i,j)
\]
证明:
我们有
\[\begin{aligned}
\varphi(ij)\varphi(\gcd(i,j))
&=ij\prod_{p\mid i\lor p\mid j} p^{-1}\cdot\gcd(i,j)\prod_{p\mid i\land p\mid j} p^{-1}\\
&=\gcd(i,j)i\prod_{p\mid i} p^{-1}\cdot j\prod_{p\mid j} p^{-1}\\
&=\gcd(i,j)\varphi(i)\varphi(j)
\end{aligned}
\]
(第二步由容斥原理可得)
因此有
\[\begin{aligned}
&\sum_{i=1}^n\sum_{j=1}^m\varphi(ij)\\
=&\sum_{i=1}^n\sum_{j=1}^m\frac{\varphi(i)\varphi(j)\gcd(i,j)}{\varphi(\gcd(i,j))}\\
=&\sum_{d=1}^n\frac{d}{\varphi(d)}\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=d]\varphi(i)\varphi(j)\\
=&\sum_{d=1}^n\frac{d}{\varphi(d)}\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1}^{\lfloor m/d\rfloor}[\gcd(i,j)=1]\varphi(id)\varphi(jd)\\
=&\sum_{d=1}^n\frac{d}{\varphi(d)}\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1}^{\lfloor m/d\rfloor}\varphi(id)\varphi(jd)\sum_{p\mid i,p\mid j}\mu(p)\\
=&\sum_{d=1}^n\frac{d}{\varphi(d)}\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)\sum_{i=1}^{\lfloor n/dp\rfloor}\sum_{j=1}^{\lfloor m/dp\rfloor}\varphi(idp)\varphi(jdp)\\
=&\sum_{t=1}^n\sum_{d\mid t}\frac{d}{\varphi(d)}\mu(t/d)\sum_{i=1}^{\lfloor n/t\rfloor}\varphi(it)\sum_{j=1}^{\lfloor m/t\rfloor}\varphi(jt) & t=dp\\
\end{aligned}
\]
设 \(f(n)=\displaystyle\sum_{d\mid n}\frac{d}{\varphi(d)}\mu(n/d)\),预处理是简单的,可以做到 \(O(n\log n)\)。
设 \(g(k,n)=\displaystyle\sum_{i=1}^{n}\varphi(ik)\),由于 \(ik\le m\),显然此式只有 \(O(n\log n)\) 种取值,也可以直接预处理。
那么原式就成了
\[\begin{aligned}
&\sum_{t=1}^n\sum_{d\mid t}\frac{d}{\varphi(d)}\mu(t/d)\sum_{i=1}^{\lfloor n/t\rfloor}\varphi(it)\sum_{j=1}^{\lfloor m/t\rfloor}\varphi(jt)\\
=&\sum_{t=1}^nf(t)g(t,\lfloor n/t\rfloor)g(t,\lfloor m/t\rfloor)
\end{aligned}
\]
发现这个式子不太好数论分块,考虑设 \(h(a,b,n)=\displaystyle\sum_{i=1}^nf(i)g(i,a)g(i,b)\),那么原式即可数论分块,即
\[\begin{aligned}
&\sum_{t=1}^nf(t)g(t,\lfloor n/t\rfloor)g(t,\lfloor m/t\rfloor)\\
=&\sum_{\lfloor n/l\rfloor=\lfloor n/r\rfloor,\lfloor m/l\rfloor=\lfloor m/r\rfloor}h(\lfloor n/r\rfloor,\lfloor m/r\rfloor,r)-h(\lfloor n/r\rfloor,\lfloor m/r\rfloor,l-1)\\
\end{aligned}
\]
(可以看成是直接对 \(f(t)g(t,\lfloor n/t\rfloor)g(t,\lfloor m/t\rfloor)\) 求前缀和)
但是 \(h\) 的取值数量很多,预处理不论是时间还是空间开销都是极大的。
考虑根号分治,设一个阈值 \(B\),对于 \(\lfloor m/r\rfloor\le B\) 的数预处理,对于 \(\lfloor m/r\rfloor >B\) 的数,我们有 \(r<\lfloor m/B\rfloor\),这一段可以直接暴力。
这时我们考虑 \(h\) 的取值数量量级。对于 \(h(a,b,k)\),不妨设 \(a\le b\),我们有 \(bk\le n\),故取值数量为 \(\displaystyle B\sum_{i=1}^Bn/i=Bn\sum_{i=1}^B 1/i=Bn\log B\)。
总时间复杂度为 \(O(n\log n+Bn\log B+T\cdot(\dfrac{n}{B}+\sqrt{n}))\),空间复杂度为 \(O(n\log n+Bn\log B)\)。若要最小化上面那个式子,我们就需要满足 \(B^2\log B=T\),近似解为 \(B=50\)。
题意
求
\[\sum_{i=1}^n\sum_{j=1}^m\varphi(\frac{\operatorname{lcm}(i,j)}{\gcd(i,j)})
\]
对 \(23333\) 取模的值。
思路
以下设 \(n\le m\)。
我们有
\[\begin{aligned}
&\sum_{i=1}^n\sum_{j=1}^m\varphi(\frac{\operatorname{lcm}(i,j)}{\gcd(i,j)})\\
=&\sum_{i=1}^n\sum_{j=1}^m\varphi(\frac{ij}{\gcd(i,j)^2})\\
=&\sum_{d=1}^n\sum_{i=1}^n\sum_{j=1}^m\varphi(\frac{ij}{d^2})[\gcd(i,j)=d]\\
=&\sum_{d=1}^n\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1}^{\lfloor m/d\rfloor}\varphi(ij)[\gcd(i,j)=1]\\
\end{aligned}
\]
由 \(\gcd(i,j)=1\),我们有 \(\varphi(ij)=\varphi(i)\varphi(j)\)。于是有
\[\begin{aligned}
&\sum_{d=1}^n\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1}^{\lfloor m/d\rfloor}\varphi(ij)[\gcd(i,j)=1]\\
=&\sum_{d=1}^n\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1}^{\lfloor m/d\rfloor}\varphi(i)\varphi(j)\sum_{p\mid i,p\mid j}\mu(p)\\
=&\sum_{d=1}^n\sum_{p=1}^{\lfloor n/d\rfloor}\mu(p)\sum_{i=1}^{\lfloor n/dp\rfloor}\varphi(ip)\sum_{j=1}^{\lfloor m/dp\rfloor}\varphi(jp)\\
=&\sum_{t=1}^n\sum_{p\mid t}\mu(p)\sum_{i=1}^{\lfloor n/t\rfloor}\varphi(ip)\sum_{j=1}^{\lfloor m/t\rfloor}\varphi(jp) & t=dp\\
\end{aligned}
\]
设 \(g(k,n)=\displaystyle\sum_{i=1}^{n}\varphi(ik)\),由于 \(ik\le m\),显然此式只有 \(O(n\log n)\) 种取值,可以直接预处理。
那么有
\[\begin{aligned}
&\sum_{t=1}^n\sum_{p\mid t}\mu(p)\sum_{i=1}^{\lfloor n/t\rfloor}\varphi(ip)\sum_{j=1}^{\lfloor m/t\rfloor}\varphi(jp)\\
=&\sum_{t=1}^n\sum_{p\mid t}\mu(p)g(p,\lfloor n/t\rfloor)g(p,\lfloor m/t\rfloor)\\
\end{aligned}
\]
再设 \(h(a,b,n)=\displaystyle\sum_{i=1}^n\sum_{p\mid i}\mu(p)g(p,a)g(p,b)\)。
那么按 P4240 的套路做就行了。
注意预处理 \(h\) 的时候我们需要先预处理 \(\displaystyle\sum_{p\mid i}\mu(p)g(p,a)g(p,b)\),预处理瓶颈就在这里,计算一下,有
\[\begin{aligned}
&O(\sum_{i=1}^B\sum_{j=1}^B\sum_{p=1}^{n/j}n/jp)\\
=&O(n\sum_{i=1}^B\sum_{j=1}^B1/j\sum_{p=1}^{n/j}1/p)\\
=&O(n\sum_{i=1}^B\ln(B)\ln(n))\\
=&O(nB\ln(B)\ln(n))\\
\end{aligned}
\]
总时间复杂度即为 \(O(n\log n+nB\log B\log n+T(n/B\log(n/B)+\sqrt{n}))\),最优的 \(B\) 满足 \(B^2\log B=T\),近似解为 \(B=80\)。