积性函数学习笔记

数论分块

对于形如

\[\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) \]

性质

  1. 满足交换律、结合律、分配律。
  2. \(\epsilon\) 为狄利克雷卷积的单位元,即有 \((f*\epsilon)(n)=\displaystyle\sum_{d\mid n}f(d)\epsilon(n/d)=f(n)\)
  3. \(\mu\) 为狄利克雷卷积中 \(1\) 的逆元,即 \(f*1=h\iff f=h*\mu\)
  4. \(f,g\) 为积性函数,则 \(f*g\) 为积性函数。
  5. \(\epsilon=\mu*1=\displaystyle\sum_{d\mid n}\mu(d)\)
  6. \(1*\operatorname{id}^k=\sigma_k\)
  7. \(\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})\)

例题

PGCD - Primes in GCD Table

题意

\[\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的GCDP2568 GCD

GCDMAT - GCD OF MATRIX

题意

\[\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)\)

P1447 [NOI2010] 能量采集

题意

\[\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 \]

直接套上面的式子即可。

P1390 公约数的和

题意

\[\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} \]

直接套上面的式子即可。

LCMSUM - LCM Sum

题意

\[\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\) 的情况。

P3327 [SDOI2015]约数个数和

题意

\[\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\) 后数论分块即可。

P5221 Product

题意

\[\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\) 取模。

P6055 [RC-02] GCD

题意

\[\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})\)


P3768 简单的数学题

题意

\[\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} \]


P3172 [CQOI2015]选数

题意

\[\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} \]

杜教筛维护前缀和,数论分块即可。

P4449 于神之怒加强版

题意

\[\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) \]

后面那坨东西做个狄利克雷前缀差分就好了。

P6825 「EZEC-4」求和

题意

\[\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)\)

P1829 [国家集训队]Crash的数字表格 / JZPTAB

题意

\[\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\),于是可以线性筛预处理后整除分块。

P6156 简单题

题意

\[\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)\) 即可。

  1. \(k=1\):此时,\(h(p)=\mu(p)+p\mu^2(p)=p-1\)
  2. \(k=2\):此时,\(h(p^2)=\mu(p^2)+p\mu^2(p)\mu(p)+p^2\mu^2(p^2)=-p\)
  3. \(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 简单题」加强版

P7486 「Stoi2031」彩虹

题意

\[\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\) 取模。

P3704 [SDOI2017]数字表格

题意

\[\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))\) 预处理,数论分块即可。

GCDMAT2 - GCD OF MATRIX (hard)

题意

\[\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\),数论分块。

至此终于能过了。

P1587 [NOI2016] 循环之美

题意

求对于所有 \(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})\),证明参考数论分块套杜教筛复杂度证明。

P3700 [CQOI2017]小 Q 的表格

题意

有一个表格 \(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})\)

P5518 [MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题

题意

\[\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)\)

P4240 毒瘤之神的考验

题意

\[\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\)

P5572 [CmdOI2019]简单的数论题

题意

\[\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\)

posted @ 2023-01-26 15:01  bykem  阅读(190)  评论(0)    收藏  举报