莫比乌斯反演与狄利克雷卷积

3 篇文章 0 订阅
3 篇文章 0 订阅

狄利克雷卷积相关

一、数论函数

数论函数是指定义在整数集上,陪域是实数或复数的函数。 数论函数又称为算术函数。

σ ( n ) \sigma(n) σ(n),表示 n n n的约数之和的函数,就是一个数论函数;

i d ( n ) = n id(n)=n id(n)=n,表示 n n n本身,也是数论函数。

它们的定义域都是整数。

二、积性函数

1、积性函数的定义

积性函数是指满足下列条件的一类数论函数。设函数为 f f f, 设 a , b a,b a,b是任意两个互质的整数。

如果满足 f ( a ) × f ( b ) = f ( a × b ) f(a) \times f(b) = f(a\times b) f(a)×f(b)=f(a×b), 则函数 f f f为积性函数。

如果不要求 a , b a,b a,b互质,仍然满足 f ( a ) × f ( b ) = f ( a × b ) f(a) \times f(b) = f(a \times b) f(a)×f(b)=f(a×b),则称 f f f为完全积性函数。

许多函数都是积性函数。

2、常见的积性函数

常见的积性函数有:

单位函数: ϵ ( n ) = [ n = 1 ] \epsilon(n) = [n = 1] ϵ(n)=[n=1] (方括号是艾佛森表示法,类似于一个条件表达式,当方括号中的条件成立时返回 1 1 1;否则返回 0 0 0)

常数函数: I ( n ) = 1 I(n) = 1 I(n)=1

恒等函数: I d ( n ) = n Id(n) = n Id(n)=n

幂函数: I d k ( n ) = n k Id_k(n) = n^k Idk(n)=nk

恒等函数可以看做 k = 1 k=1 k=1的幂函数,常数函数可以看做 k = 0 k=0 k=0的幂函数。

约数函数: σ ( n ) = ∑ d ∣ n d \sigma(n) = \sum_{d|n}d σ(n)=dnd

约数个数函数: σ 0 ( n ) = ∑ d ∣ n d 0 \sigma_0(n)=\sum_{d|n}d^0 σ0(n)=dnd0

欧拉函数: ϕ ( n ) = ∑ a ≤ n [ ( a , n ) = 1 ] \phi(n)=\sum_{a\leq n}[(a,n)=1] ϕ(n)=an[(a,n)=1]

莫比乌斯函数: μ ( n ) = { 1 n = 1 ( − 1 ) k n = p 1 … p k 0 p 2 ∣ n \mu(n) = \begin{cases} 1 &n=1 \\ (-1)^k &n=p_1\dots p_k \\0 &p^2|n \end{cases} μ(n)= 1(1)k0n=1n=p1pkp2n

其中 I ( n ) , I d ( n ) , I d k ( n ) I(n), Id(n), Id_k(n) I(n),Id(n),Idk(n)为完全积性函数。

3、证明欧拉函数为积性函数

如何证明欧拉函数是积性函数?即设 a , b a,b a,b互质, ϕ ( a b ) = ϕ ( a ) ∗ ϕ ( b ) \phi(ab) = \phi(a) *\phi(b) ϕ(ab)=ϕ(a)ϕ(b)

证明:设 x x x a b ab ab互质,且 x < a b x \lt ab x<ab。则 x x x一定同时与 a a a b b b互质,设 p = x % a , q = x % b p = x \% a, q = x \%b p=x%a,q=x%b,显然有 p ∈ Z a ∗ , q ∈ Z b ∗ p \in Z_a^*,q \in Z_b^* pZa,qZb,其中 Z a ∗ , Z b ∗ Z_a^*,Z_b^* Za,Zb分别表示 a , b a,b a,b的简化剩余系。

{ x ≡ p ( m o d a ) x ≡ q ( m o d b ) \begin{cases} x \equiv p \pmod{a} \\ x \equiv q \pmod {b} \end{cases} {xp(moda)xq(modb)
则以上方程的解 x x x的个数就是 ϕ ( a b ) \phi(ab) ϕ(ab)。对于任意的 p ∈ Z a ∗ , q ∈ Z b ∗ p \in Z_a^*, q \in Z_b^* pZa,qZb,根据中国剩余定理,在 [ 0 , a b − 1 ] [0, ab-1] [0,ab1]内都存在一组解。而满足条件的 p , q p,q p,q对刚好有 ϕ ( a ) × ϕ ( b ) \phi(a) \times \phi(b) ϕ(a)×ϕ(b),所以 ϕ ( a b ) = ϕ ( a ) × ϕ ( b ) \phi(ab) = \phi(a) \times \phi(b) ϕ(ab)=ϕ(a)×ϕ(b)

得证。

4、积性函数的性质

(1)、积性函数的乘积仍然是积性函数。
简单证明一下:
H , G H,G H,G为积性函数, F = H × G F=H \times G F=H×G a , b a,b a,b互质。
F ( a × b ) = H ( a × b ) × G ( a × b ) = H ( a ) × H ( b ) × G ( a ) × G ( b ) = ( H ( a ) × G ( a ) ) × ( H ( b ) × G ( b ) ) = F ( a ) × F ( b ) F(a\times b)=H(a \times b) \times G(a \times b)=H(a) \times H(b) \times G(a) \times G(b) = (H(a) \times G(a)) \times (H(b) \times G(b)) = F(a) \times F(b) F(a×b)=H(a×b)×G(a×b)=H(a)×H(b)×G(a)×G(b)=(H(a)×G(a))×(H(b)×G(b))=F(a)×F(b)

(2)、积性函数的狄利克雷卷积仍然是积性函数。
简单证明一下:
H , G H,G H,G为积性函数, F = H × G , a , b F=H \times G, a, b F=H×G,a,b为互质的正整数。
F ( a × b ) = ∑ d ∣ ( a b ) H ( d ) × G ( a b d ) = ∑ ( d 1 ∣ a , d 2 ∣ b ) H ( d 1 ) H ( d 2 ) G ( a / d 1 ) G ( b / d 2 ) = ∑ d 1 ∣ a H ( d 1 ) G ( a / d 1 ) ∑ d 2 ∣ b H ( d 2 ) G ( b / d 2 ) = F ( a ) × F ( b ) \begin{aligned} F(a \times b) &= \sum_{d|(ab)}H(d)\times G(\frac{ab}{d}) = \sum_{(d_1|a,d_2|b)} H(d_1)H(d_2)G(a/d_1)G(b/d_2) \\ &=\sum_{d_1|a}H(d_1)G(a/d_1)\sum_{d_2|b}H(d_2)G(b/d_2)=F(a)\times F(b) \end{aligned} F(a×b)=d(ab)H(d)×G(dab)=(d1a,d2b)H(d1)H(d2)G(a/d1)G(b/d2)=d1aH(d1)G(a/d1)d2bH(d2)G(b/d2)=F(a)×F(b)

积性函数都可以采用欧拉筛求值。

f ( n ) = f ( p 1 a 1 p 2 a 2 … p k a k ) = f ( p 1 a 1 ) ∗ f ( p 2 a 2 ) … f ( p k a k ) f(n) = f(p_1^{a_1}p_2^{a_2} \dots p_k^{a_k})=f(p_1^{a_1})*f(p_2^{a_2}) \dots f(p_k^{a_k}) f(n)=f(p1a1p2a2pkak)=f(p1a1)f(p2a2)f(pkak)
其中 p 1 , p 2 , … , p k p_1,p_2,\dots,p_k p1,p2,,pk表示 n n n的不同质因子。

三、莫比乌斯反演

1. 莫比乌斯函数

μ ( n ) = { 1 n = 1 ( − 1 ) k n = p 1 … p k 0 p 2 ∣ n \mu(n) = \begin{cases} 1 &n=1 \\ (-1)^k &n=p_1\dots p_k \\0 &p^2|n \end{cases} μ(n)= 1(1)k0n=1n=p1pkp2n

p 2 ∣ n p^2|n p2n表示 n n n存在一个平方因子。

莫比乌斯函数的性质

∑ d ∣ n μ ( d ) = [ n = 1 ] \begin{aligned} \sum_{d|n}\mu(d) = [n = 1] \end{aligned} dnμ(d)=[n=1]

证明:

​ 当 d = 1 d=1 d=1时, μ ( 1 ) = 1 \mu(1)=1 μ(1)=1;

​ 其他情况下,只有当 d d d的质因子都只出现一次,假设此时 d d d的质因子种类为 k k k, 则 μ ( d ) = ( − 1 ) k \mu(d)=(-1)^k μ(d)=(1)k

d d d中出现的质因子,必定是 n n n的质因子,所以,问题变成从 n n n的所有质因子中选择若干,选奇数个则贡献 − 1 -1 1, 选偶数个则贡献 1 1 1.

​ 设 n n n中一共有 m m m类质因子, ∑ d ∣ n μ ( d ) = ∑ ( − 1 ) j ( m j ) = ( 1 − 1 ) m \begin{aligned} \sum_{d|n}\mu(d) = \sum(-1)^j\binom{m}{j}=(1-1)^m \end{aligned} dnμ(d)=(1)j(jm)=(11)m

​ 以上是根据二项式定理: ( x + y ) n = ∑ i = 0 n ( n i ) x i y n − i \begin{aligned} (x+y)^n=\sum\limits_{i=0}^n\binom{n}{i}x^iy^{n-i} \end{aligned} (x+y)n=i=0n(in)xiyni

​ 当 m > 0 m>0 m>0时, ∑ d ∣ n μ ( d ) = 0 \sum\limits_{d|n}\mu(d) = 0 dnμ(d)=0;

​ 当 m = 0 m=0 m=0时, ∑ d ∣ n μ ( d ) = 1 \sum\limits_{d|n}\mu(d) = 1 dnμ(d)=1

2. 莫比乌斯反演

(1). 公式1:

F ( n ) = ∑ d ∣ n f ( d ) F(n)=\sum_{d|n}f(d) F(n)=dnf(d), 则有 f ( n ) = ∑ d ∣ n μ ( d ) F ( n d ) f(n)=\sum_{d|n}\mu(d)F(\frac{n}{d}) f(n)=dnμ(d)F(dn)

证明:

f ( n ) = ∑ d ∣ n μ ( d ) F ( n / d ) = ∑ d ∣ n μ ( d ) ∑ p ∣ ( n / d ) f ( p ) = ∑ p ∣ n f ( p ) ∑ d ∣ ( n / p ) μ ( d ) \begin{aligned}f(n)=\sum_{d|n}\mu(d)F(n/d)=\sum_{d|n}\mu(d)\sum_{p|(n/d)}f(p)=\sum_{p|n}f(p)\sum_{d|(n/p)}\mu(d)\end{aligned} f(n)=dnμ(d)F(n/d)=dnμ(d)p(n/d)f(p)=pnf(p)d(n/p)μ(d)

根据莫比乌斯函数的性质,可知只有当 n / p = 1 n/p=1 n/p=1时, ∑ d ∣ ( n / p ) μ ( d ) = 1 \sum_{d|(n/p)}\mu(d)=1 d(n/p)μ(d)=1,其他情况下都为 0 0 0.

所以,

∑ p ∣ n f ( p ) ∑ d ∣ ( n / p ) μ ( d ) = f ( n ) \begin{aligned}\sum_{p|n}f(p) \sum_{d|(n/p)}\mu(d) = f(n) \end{aligned} pnf(p)d(n/p)μ(d)=f(n)

得证!

(2). 公式2:

F ( n ) = ∑ n ∣ d f ( d ) F(n) = \sum_{n|d}f(d) F(n)=ndf(d), 则有 f ( n ) = ∑ n ∣ d μ ( d / n ) F ( d ) f(n)=\sum_{n|d}\mu(d/n)F(d) f(n)=ndμ(d/n)F(d)

证明:

f ( n ) = ∑ n ∣ d μ ( d / n ) F ( d ) = ∑ n ∣ d μ ( d / n ) ∑ d ∣ p f ( p ) = ∑ n ∣ p f ( p ) ∑ d ∣ ( p / n ) μ ( d ) = f ( n ) \begin{aligned} f(n)=\sum_{n|d}\mu(d/n)F(d)=\sum_{n|d}\mu(d/n)\sum_{d|p}f(p)= \sum_{n|p}f(p)\sum_{d|(p/n)}\mu(d) = f(n)\end{aligned} f(n)=ndμ(d/n)F(d)=ndμ(d/n)dpf(p)=npf(p)d(p/n)μ(d)=f(n)

3. 一些有趣的性质:

  • n > 1 n>1 n>1时, ∑ i < n ( i × [ g c d ( i , n ) = 1 ] ) = n ϕ ( n ) 2 \sum\limits_{i \lt n} (i \times [gcd(i,n)=1]) = \frac{n \phi(n)}{2} i<n(i×[gcd(i,n)=1])=2nϕ(n)
    解释:当 n > 1 n>1 n>1时, n n n的简化剩余系中,元素都是成对出现的,每一对元素的和为 n n n.

  • ϕ ( n ) = ∑ i ∣ d μ ( i ) ∗ ( n / i ) \phi(n)=\sum_{i|d}\mu(i)*(n/i) ϕ(n)=idμ(i)(n/i)
    解释:根据容斥原理,与 n n n互质的数,其个数为:(与 n n n的公约数为 1 1 1的数的个数)-(与 n n n的公约数由一类质因子组成的数的个数)+(与 n n n的公约数由两类质因子组成的数的个数)- (与 n n n的公约数由三类质因子组成的数的个数)+ … \dots - (与 n n n的公约数由奇数类质因子组成的数的个数) + (与 n n n的公约数由偶数类质因子组成的数的个数)。

  • n = ∑ i ∣ d ϕ ( i ) n= \sum_{i|d}\phi(i) n=idϕ(i)
    解释
    小于等于 n n n的整数共有 n n n个,可以分类统计:与 n n n的最大公约数为 i i i的数有 ϕ ( n / i ) \phi(n/i) ϕ(n/i)个。于是有 n = ∑ i ∣ d ϕ ( n / i ) = ∑ i ∣ d ϕ ( i ) n = \sum_{i |d} \phi(n/i) = \sum_{i|d} \phi(i) n=idϕ(n/i)=idϕ(i)

  • 扩展欧拉定理: a b % p = a ( b % ϕ ( p ) + ϕ ( p ) ) % p a^b\%p=a^{(b\%\phi(p)+\phi(p))}\%p ab%p=a(b%ϕ(p)+ϕ(p))%p ,此处不要求 a , p a,p a,p互质。
    解释:参考另一篇待写的博客。

4. 莫比乌斯反演的应用

(1). 例1:证明下式成立

∑ d ∣ n μ ( d ) ( n d ) = ϕ ( n ) \begin{aligned} \sum\limits_{d|n}\mu(d)(\frac{n}{d})=\phi(n) \end{aligned} dnμ(d)(dn)=ϕ(n)

证明:

∵ n = ∑ d ∣ n ϕ ( n / d ) = ∑ d ∣ n ϕ ( d ) \because n=\sum_{d|n}\phi(n/d) =\sum_{d|n}\phi(d) n=dnϕ(n/d)=dnϕ(d),

F ( n ) = n F(n)=n F(n)=n, f ( n ) = ϕ ( d ) f(n)=\phi(d) f(n)=ϕ(d),

则上式为 F ( n ) = ∑ d ∣ n f ( d ) F(n)=\sum_{d|n}f(d) F(n)=dnf(d), 利用莫比乌斯反演公式1, 可得:

f ( n ) = ∑ d ∣ n μ ( d ) F ( n / d ) \begin{aligned} f(n)=\sum_{d|n}\mu(d)F(n/d) \end{aligned} f(n)=dnμ(d)F(n/d)

即:

ϕ ( n ) = ∑ d ∣ n μ ( d ) ( n / d ) \begin{aligned} \phi(n)=\sum_{d|n}\mu(d)(n/d) \end{aligned} ϕ(n)=dnμ(d)(n/d)

(2). BZOJ2301 problem B
题目描述

对于给出的n个询问,每次求有多少个数对 ( x , y ) (x,y) (x,y),满足 a ≤ x ≤ b a≤x≤b axb c ≤ y ≤ d c≤y≤d cyd,且 g c d ( x , y ) = k gcd(x,y) = k gcd(x,y)=k g c d ( x , y ) gcd(x,y) gcd(x,y)函数为x和y的最大公约数。

输入格式

第一行一个整数 n n n,接下来 n n n行每行五个整数,分别表示 a 、 b 、 c 、 d 、 k a、b、c、d、k abcdk

输出格式

n n n行,每行一个整数表示满足要求的数对 ( x , y ) (x,y) (x,y)的个数

数据规模

n ≤ 50000 , 1 ≤ a ≤ b ≤ 50000 , 1 ≤ c ≤ d ≤ 50000 n\leq 50000, 1 \leq a \leq b \leq 50000, 1 \leq c \leq d \leq 50000 n50000,1ab50000,1cd50000

分析

f ( k ) f(k) f(k) ∑ x = a b ∑ y = c d [ g c d ( x , y ) = k ] \sum_{x=a}^b\sum_{y=c}^d[gcd(x,y)=k] x=aby=cd[gcd(x,y)=k], F ( k ) F(k) F(k) ∑ x = a b ∑ y = c d [ k ∣ g c d ( x , y ) ] \sum_{x=a}^b\sum_{y=c}^d[k|gcd(x,y)] x=aby=cd[kgcd(x,y)],

则有 F ( k ) = ∑ k ∣ n f ( n ) F(k)=\sum_{k|n}f(n) F(k)=knf(n)

F ( k ) F(k) F(k)是很好求的,它为: ( ⌊ b / k ⌋ − ⌊ ( a − 1 ) / k ⌋ ) ∗ ( ⌊ d / k ⌋ − ⌊ ( c − 1 ) / k ⌋ ) (\lfloor b/k \rfloor - \lfloor (a-1)/k \rfloor)*(\lfloor d/k \rfloor - \lfloor (c-1)/k\rfloor) (⌊b/k⌊(a1)/k⌋)(⌊d/k⌊(c1)/k⌋).

应用莫比乌斯反演:

可知

f ( k ) = ∑ k ∣ n μ ( n / k ) ∗ F ( n ) = ∑ k ∣ n μ ( n / k ) ∗ ( ⌊ b / n ⌋ − ⌊ ( a − 1 ) / n ⌋ ) ∗ ( ⌊ d / n ⌋ − ⌊ ( c − 1 ) / n ⌋ ) \begin{aligned} f(k) = \sum_{k|n} \mu(n/k)*F(n) = \sum_{k|n}\mu(n/k)*(\lfloor b/n \rfloor - \lfloor (a-1)/n \rfloor)*(\lfloor d/n \rfloor - \lfloor (c-1)/n\rfloor) \end{aligned} f(k)=knμ(n/k)F(n)=knμ(n/k)(⌊b/n⌊(a1)/n⌋)(⌊d/n⌊(c1)/n⌋)

注意 a , b , c , d a, b, c, d a,b,c,d为常数, ⌊ a / n ⌋ \lfloor a/n \rfloor a/n随着 n n n增加而变化,但 ⌊ a / n ⌋ \lfloor a/n \rfloor a/n的取值最多只有 2 a 2\sqrt{a} 2a 个。

为什么呢?

如下图所示,为 f ( n ) = 1 / n ( n > 0 ) f(n) = 1/n (n>0) f(n)=1/nn>0)的曲线图像,它是一条以 y = x y=x y=x对称的曲线。这很好理解。

( x , y ) (x,y) (x,y)在曲线上,则 ( y , x ) (y,x) (y,x)也必在曲线上。

f ( x ) = a / x f(x)=a/x f(x)=a/x而言,曲线对称的中心点在 ( a , a ) (\sqrt{a},\sqrt{a}) (a ,a )处,在中心点左边, x x x最多 a \sqrt{a} a 个整数取值,因为对称,所以在 ( a , a ) (\sqrt{a},\sqrt{a}) (a ,a )的右边, y y y值最多 a \sqrt{a} a 个整数值。

所以, ⌊ a / n ⌋ \lfloor a/n \rfloor a/n最多有 2 a 2\sqrt{a} 2a 个整数值。

在这里插入图片描述

于是,对于

f ( k ) = ∑ k ∣ n μ ( n / k ) ∗ F ( n ) = ∑ k ∣ n μ ( n / k ) ∗ ( ⌊ b / n ⌋ − ⌊ ( a − 1 ) / n ⌋ ) ∗ ( ⌊ d / n ⌋ − ⌊ ( c − 1 ) / n ⌋ ) \begin{aligned} f(k) = \sum_{k|n} \mu(n/k)*F(n) = \sum_{k|n}\mu(n/k)*(\lfloor b/n \rfloor - \lfloor (a-1)/n \rfloor)*(\lfloor d/n \rfloor - \lfloor (c-1)/n\rfloor) \end{aligned} f(k)=knμ(n/k)F(n)=knμ(n/k)(⌊b/n⌊(a1)/n⌋)(⌊d/n⌊(c1)/n⌋)

我们只需要枚举 ⌊ b / n ⌋ \lfloor{b/n} \rfloor b/n, ⌊ ( a − 1 ) / n ⌋ \lfloor (a-1)/n \rfloor ⌊(a1)/n, ⌊ d / n ⌋ \lfloor d/n \rfloor d/n, ⌊ ( c − 1 ) / n ⌋ \lfloor (c-1)/n \rfloor ⌊(c1)/n,最多 8 d 8\sqrt{d} 8d 个值。

它们相当于把 n n n的变化范围,分成了 8 d 8\sqrt{d} 8d 个区间,每个区间再去求 μ ( n / k ) \mu(n/k) μ(n/k)的区间和,这样就能够在 O ( d ) O(\sqrt{d}) O(d )的时间复杂度求出 f ( k ) f(k) f(k).

这种方法叫整除分块, 形如 a / x a/x a/x的值最多只有 O ( a ) O(\sqrt{a}) O(a )个值,可以将表达式分为 O ( a ) O(\sqrt{a}) O(a )类,最终的时间复杂度可以优化到 O ( a ) O(\sqrt{a}) O(a ).

#include <bits/stdc++.h>
using namespace std;
#define LL long long int
#define MAXN 500005
int a, b, c, d, k, T, tot, last;
LL res;
int mu[MAXN], prime[MAXN], premu[MAXN];
bool flg[MAXN];
int getmu(){
    mu[1] = 1;
    for(int i = 2; i < MAXN; i++){
        if(flg[i] == 0) prime[tot++] = i, mu[i] = -1;
        for(int j = 0; j < tot; j++){
            if(prime[j] * i >= MAXN) break;
            flg[prime[j] * i] = 1;
            if(i % prime[j] == 0) {
                mu[prime[j] * i] = 0;
                break;
            }
            mu[prime[j] * i] = -mu[i];
        }
    }
}
int getpremu(){
    for(int i = 1; i < MAXN; i++){
        premu[i] = premu[i - 1] + mu[i];
    }
}
int main(){
    scanf("%d", &T);
    getmu();
    getpremu();
    while(T--){
        scanf("%d %d %d %d %d", &a, &b, &c, &d, &k);
        int h1, l1, h2, l2;
        res = 0;
        last = 0;
        for(int i = k; ;i = i + k){
            h1 = (b/i);
            l1 = (a - 1)/i;
            h2 = (d/i);
            l2 = (c - 1)/i;
            int ii = MAXN;
            if(a>i) ii = min(ii, (a-1)/((a-1)/i));
            if(b>=i) ii =min(ii, b/(b/i));
            if(c>i) ii =min(ii, (c-1)/((c-1)/i));
            if(d>=i) ii =min(ii, d/(d/i));
            i = ii - ii % k;
            if(ii == MAXN)break;
            res += 1ll * (premu[i/k] - premu[last/k]) * (h1 - l1) * (h2 - l2);
            last = i;
        }
        printf("%lld\n", res);
    }
    return 0;
}

(3). YY的GCD
题目描述:

求有多少数对 ( x , y ( 1 ≤ x ≤ n , 1 ≤ y ≤ m ) (x,y(1\leq x \leq n, 1\leq y \leq m) (x,y(1xn,1ym)满足 g c d ( x , y ) gcd(x,y) gcd(x,y)为质数。

数据范围

1 ≤ n , m ≤ 1 0 8 , C ≤ 1 0 5 1 \leq n,m \leq 10^8, C \leq 10^5 1n,m108,C105, C C C表示多组数据。

分析

f ( p ) f(p) f(p)表示在 x , y x,y x,y的值 n n n范围内 g c d ( x , y ) gcd(x,y) gcd(x,y) p p p的对数, 设 F ( p ) F(p) F(p)表示 g c d ( x , y ) gcd(x,y) gcd(x,y) p p p的倍数的 ( x , y ) (x,y) (x,y)的对数。

P P P为在 m i n ( n , m ) min(n,m) min(n,m)内的质数集合。

则有 F ( p ) = ∑ p ∣ n f ( n ) F(p)=\sum_{p|n}f(n) F(p)=pnf(n).

F ( 1 ) = ∑ p ≤ n f ( p ) F(1)=\sum_{p\leq n} f(p) F(1)=pnf(p)

f ( p ) = ∑ p ∣ n μ ( n / p ) F ( n ) f(p) = \sum_{p|n}\mu(n/p)F(n) f(p)=pnμ(n/p)F(n)

f ( 1 ) = ∑ n μ ( n ) F ( n ) f(1)=\sum_{n}\mu(n)F(n) f(1)=nμ(n)F(n)

∑ ( p ∈ P ) ∧ ( 1 ≤ x ≤ n ) ∧ ( 1 ≤ y ≤ m ) f ( p ) = ∑ ( p ∈ P ) ∧ ( 1 ≤ x ≤ n / p ) ∧ ( 1 ≤ y ≤ m / p ) f ( 1 ) = ∑ ( p ∈ P ) ∧ ( 1 ≤ x ≤ n / p ) ∧ ( 1 ≤ y ≤ m / p ) ∧ ( 1 ∣ d ) F ( d ) μ ( d ) = ∑ ( p ∈ P ) ∧ ( d ≤ m i n ( n / p , m / p ) ) μ ( d ) ( ⌊ n / p d ⌋ ∗ ⌊ m / p d ⌋ ) \begin{aligned} \sum_{(p \in P) \land (1 \leq x \leq n) \land (1 \leq y \leq m)}f(p) &= \sum_{(p \in P) \land (1 \leq x \leq n/p) \land (1 \leq y \leq m/p)}f(1) \\ &= \sum_{(p \in P) \land (1 \leq x \leq n/p) \land (1 \leq y \leq m/p) \land(1 |d)} F(d)\mu(d) \\&= \sum_{(p \in P) \land(d \leq min(n/p, m/p))}\mu(d)(\lfloor n/pd \rfloor* \lfloor m/pd \rfloor) \end{aligned} (pP)(1xn)(1ym)f(p)=(pP)(1xn/p)(1ym/p)f(1)=(pP)(1xn/p)(1ym/p)(1∣d)F(d)μ(d)=(pP)(dmin(n/p,m/p))μ(d)(⌊n/pdm/pd⌋)

p d pd pd=T,

上式变为

∑ ( p ∈ P ) ∧ ( T ≤ m i n ( n , m ) ) μ ( T / p ) ( ⌊ n / T ⌋ ∗ ⌊ m / T ⌋ ) = ∑ T ≤ m i n ( n , m ) ( ⌊ n / T ⌋ ∗ ⌊ m / T ⌋ ) ∑ p ∣ T μ ( T / p ) \begin{aligned} \sum_{(p \in P) \land (T\leq min(n, m))}\mu(T/p)(\lfloor n/T \rfloor * \lfloor m/T \rfloor) &= \sum_{T \leq min(n,m) }(\lfloor n/T \rfloor * \lfloor m/T \rfloor)\sum_{p|T }\mu(T/p)\end{aligned} (pP)(Tmin(n,m))μ(T/p)(⌊n/Tm/T⌋)=Tmin(n,m)(⌊n/Tm/T⌋)pTμ(T/p)

n / T , m / T n/T, m/T n/T,m/T最多只有 2 n , 2 m 2\sqrt{n}, 2\sqrt{m} 2n ,2m 个,可以采用整除分块,将 T T T的范围分成最多 O ( n ) O(\sqrt{n}) O(n )个区间。后面的 ∑ p ∣ T μ ( T / p ) \sum_{p|T}\mu(T/p) pTμ(T/p),可以提前预处理出来,枚举 p p p,然后去遍历 p p p的倍数,一边遍历,一边累加 μ ( T / p ) \mu(T/p) μ(T/p)即可。 因为:

$\begin{aligned} \sum_{p|T}(T/p)=T\sum_{p|T}1/p \lt T \sum_{x \lt T}1/x \lt TlnT \end{aligned} $

所以每个数均摊下来的时间复杂度是 O ( l n T ) O(lnT) O(lnT)的,而质数的个数为 O ( T / l n T ) O(T/lnT) O(T/lnT)个,所以,这个预处理时间复杂度为 O ( T ) O(T) O(T)的。

每组数据通过整除分块,可以在 N \sqrt{N} N 内完成,所以,总的时间复杂度可以降为 C N C\sqrt{N} CN .

#include <bits/stdc++.h>
using namespace std;
#define MAXN 10000000
#define LL long long int
LL res;
int T, tot, n, m;
int mu[MAXN], prime[MAXN], premu[MAXN];
bool flg[MAXN];
void getmu(){
    mu[1] = 1;
    for(int i = 2; i < MAXN; i++){
        if(flg[i] == 0) prime[tot++] = i, mu[i] = -1;
        for(int j = 0; j < tot; j++){
            if(prime[j] * i >= MAXN) break;
            flg[prime[j] * i] = 1;
            if(i % prime[j] == 0) {
                mu[prime[j] * i] = 0;
                break;
            }
            mu[prime[j] * i] = -mu[i];
        }
    }
}

void getpremu(){
    for(int i = 2; i < MAXN; i++){
        if(flg[i] == 0){
            for(int j = 1; j * i < MAXN; j++){
                premu[j*i] += mu[j];
            }
        }
    }
    for(int i = 2; i < MAXN; i++){
        premu[i] = premu[i-1] + premu[i];
    }
}

int main(){
    scanf("%d", &T);
    getmu();
    getpremu();
    while(T--){
        scanf("%d %d", &n, &m);
        int mi = min(n, m);
        int last = 0;
        res = 0;
        for(int i = 1; i <= mi; ){
            last = i - 1;
            i = min(n/(n/i), m/(m/i));
            res += 1ll*(premu[i] - premu[last])*(n/i)*(m/i);
            i++;
        }
        printf("%lld\n", res);
    }
    return 0;
}

(4). 数表
题目描述

有一张 n × m n×m n×m 的数表,其第 i i i 行第 j j j ( 1 < = i < = n , 1 < = j < = m ) (1 <= i <= n, 1 <= j <= m) (1<=i<=n,1<=j<=m)的数值为

能同时整除 i 和 j 的所有自然数之和。给定 a , 计算数表中不大于 a 的数之和。

数据范围

Q Q Q组数据

1 ≤ n , m ≤ 1 0 5 , ∣ a ∣ ≤ 1 0 9 , Q ≤ 20000 1 \leq n,m \leq 10^5,|a| \leq 10^9, Q \leq 20000 1n,m105,a109,Q20000

分析

如果没有 a a a的限制,则要求的是
∑ i = 1 n ∑ j = 1 m σ ( g c d ( i , j ) ) = ∑ d = 1 m i n ( n , m ) ( σ ( d ) ∑ i = 1 n ∑ j = 1 m [ g c d ( i , j ) = d ] ) \begin{aligned} \sum_{i=1}^n \sum_{j=1}^m \sigma (gcd(i,j)) =\sum_{d=1}^{min(n,m)} (\sigma(d) \sum_{i=1}^n \sum_{j=1}^m[gcd(i,j)=d]) \end{aligned} i=1nj=1mσ(gcd(i,j))=d=1min(n,m)(σ(d)i=1nj=1m[gcd(i,j)=d])

其中 σ ( x ) \sigma(x) σ(x)表示 x x x的约数之和。

f ( x ) f(x) f(x)表示 ∑ i = 1 n ∑ j = 1 m [ g c d ( i , j ) = x ] \sum_{i=1}^n\sum_{j=1}^m[gcd(i,j) = x] i=1nj=1m[gcd(i,j)=x], F ( x ) F(x) F(x)表示 ∑ i = 1 n ∑ j = 1 m [ x ∣ g c d ( i , j ) ] ) = ⌊ n / x ⌋ ∗ ⌊ m / x ⌋ \sum_{i=1}^n\sum_{j=1}^m [x|gcd(i,j)]) = \lfloor n/x \rfloor * \lfloor m/x \rfloor i=1nj=1m[xgcd(i,j)])=n/xm/x

则有 F ( x ) = ∑ x ∣ p f ( p ) F(x)=\sum_{x|p}f(p) F(x)=xpf(p)

根据莫比乌斯反演,则有:

f ( x ) = ∑ x ∣ p μ ( p / x ) F ( p ) = ∑ x ∣ p μ ( p / x ) ( ⌊ n / p ⌋ ∗ ⌊ m / p ⌋ ) f(x)=\sum_{x|p}\mu(p/x)F(p)=\sum_{x|p}\mu(p/x)(\lfloor n/p\rfloor * \lfloor m/p \rfloor) f(x)=xpμ(p/x)F(p)=xpμ(p/x)(⌊n/pm/p⌋)

则式 ( 7 ) (7) (7) 可变为:
∑ d = 1 m i n ( n , m ) ( σ ( d ) ∗ f ( d ) ) = ∑ d = 1 m i n ( n , m ) ( σ ( d ) ∑ d ∣ p μ ( p / d ) F ( p ) ) = ∑ p = 1 m i n ( n , m ) F ( p ) ∑ d ∣ p σ ( d ) ∗ μ ( p / d ) = ∑ p = 1 m i n ( n , m ) ( ⌊ n / p ⌋ ∗ ⌊ m / p ⌋ ) ∗ ∑ d ∣ p σ ( d ) ∗ μ ( p / d ) \begin{aligned} \sum_{d=1}^{min(n,m)}(\sigma(d)*f(d)) &=\sum_{d=1}^{min(n,m)}(\sigma(d)\sum_{d|p}\mu(p/d)F(p)) \\ &=\sum_{p=1}^{min(n,m)}F(p)\sum_{d|p}\sigma(d)*\mu(p/d) \\ &= \sum_{p=1}^{min(n,m)}(\lfloor n/p\rfloor * \lfloor m/p \rfloor) *\sum_{d|p}\sigma(d)*\mu(p/d) \end{aligned} d=1min(n,m)(σ(d)f(d))=d=1min(n,m)(σ(d)dpμ(p/d)F(p))=p=1min(n,m)F(p)dpσ(d)μ(p/d)=p=1min(n,m)(⌊n/pm/p⌋)dpσ(d)μ(p/d)
可以利用筛法,以 O ( n l o g n ) O(nlogn) O(nlogn)的时间复杂度,预处理出来 ∑ d ∣ p σ ( d ) ∗ μ ( p / d ) \sum_{d|p}\sigma(d)*\mu(p/d) dpσ(d)μ(p/d)的前缀和,再利用整除分块在 O ( n ) O(\sqrt{n}) O(n )求出答案。

现在考虑 a a a的限制,即

∑ ( d ∣ p ) ∧ ( σ ( d ) ≤ a ) σ ( d ) ∗ μ ( p / d ) \begin{aligned} \sum_{(d|p) \land (\sigma(d) \leq a)} \sigma(d) * \mu(p/d) \end{aligned} (dp)(σ(d)a)σ(d)μ(p/d)

这个前缀和要怎么求呢?

可以按 a a a由小到大对询问排序,并按 σ ( d ) \sigma(d) σ(d)由小到大对 d d d排序,采用树状数组来维护前缀和,每次将新的符合限制的 σ ( d ) ∗ μ ( p / d ) \sigma(d)*\mu(p/d) σ(d)μ(p/d)加入进去。

时间复杂度为 O ( N l o g 2 N + Q n ) O(Nlog^2N+Q\sqrt{n}) O(Nlog2N+Qn )

四、狄利克雷卷积

f , g , h f,g,h f,g,h为数论函数, 若 h ( n ) = ∑ d ∣ n f ( d ) ∗ g ( n / d ) h(n)=\sum_{d|n}f(d)*g(n/d) h(n)=dnf(d)g(n/d), 则称 h h h函数是 g , f g,f g,f的狄利克雷卷积,写为: h = f ∗ g h=f*g h=fg.

狄利克雷卷积的性质:

一、满足交换律

f ∗ g = ∑ d ∣ n f ( d ) ∗ g ( n / d ) = ∑ d ∣ n f ( n / d ) ∗ g ( d ) = ∑ d ∣ n g ( d ) ∗ f ( n / d ) = g ∗ f f*g=\sum_{d|n}f(d)*g(n/d) = \sum_{d|n}f(n/d)*g(d)=\sum_{d|n}g(d)*f(n/d)=g*f fg=dnf(d)g(n/d)=dnf(n/d)g(d)=dng(d)f(n/d)=gf

二、满足结合律

f ∗ g ∗ h = ∑ n ∣ m ( f ∗ g ) ( n ) ∗ g ( m / n ) = ∑ n ∣ m ( ∑ d ∣ n f ( d ) ∗ g ( n / d ) ) ∗ h ( m / n ) = ∑ d ∣ m f ( d ) ∗ ( ∑ j ∣ ( m / d ) g ( j ) ∗ h ( m / ( d j ) ) = ∑ d ∣ m f ( d ) ∗ ( g ∗ h ) ( m / d ) = f ∗ ( g ∗ h ) \begin{aligned} f*g*h &= \sum_{n|m}(f*g)(n)*g(m/n) \\ &= \sum\limits_{n|m}(\sum\limits_{d|n}f(d)*g(n/d))*h(m/n) \\ &= \sum\limits_{d|m}f(d)*(\sum\limits_{j|(m/d)}g(j)*h(m/(dj)) \\ &= \sum_{d|m}f(d)*(g*h)(m/d) \\ &= f*(g*h)\end{aligned} fgh=nm(fg)(n)g(m/n)=nm(dnf(d)g(n/d))h(m/n)=dmf(d)(j(m/d)g(j)h(m/(dj))=dmf(d)(gh)(m/d)=f(gh)

ϵ \epsilon ϵ是单位函数,其他函数与单位函数做狄利克雷卷积后结果不变。它的地位相当于乘法运算中的 1 1 1, 加法运算中的 0 0 0.

三、 f ∗ ϵ = f f*\epsilon = f fϵ=f

四、 μ ∗ I = ϵ \mu * I = \epsilon μI=ϵ, 即莫比乌斯函数和常数函数互在狄利克雷卷积下互为逆元函数。

五、 f ∗ μ = g ⇔ f = g ∗ I f*\mu = g \Leftrightarrow f=g*I fμ=gf=gI

常见的狄利克雷卷积:

  1. μ ∗ I = ϵ \mu * I=\epsilon μI=ϵ

  2. μ ∗ I d = ϕ \mu *Id =\phi μId=ϕ

  3. I ∗ I d = σ I * Id = \sigma IId=σ

  4. ϕ ∗ I = I d \phi * I = Id ϕI=Id

  5. σ ∗ μ = I d \sigma * \mu = Id σμ=Id

这些狄利克雷卷积,和莫比乌斯反演有很密切的关系,但狄利克雷卷积非常简洁,可以帮助我们更好的理解莫比乌斯反演。

  1. μ ∗ I = ϵ \mu * I = \epsilon μI=ϵ

    莫比乌斯反演形式:

    ∵ I ( n ) = ∑ d ∣ n ϵ \because I(n)=\sum_{d|n}\epsilon I(n)=dnϵ(d)$, $

    ∴ ϵ ( n ) = ∑ d ∣ n μ ( d ) ∗ I ( n / d ) \therefore \epsilon(n) = \sum_{d|n}\mu(d) * I(n/d) ϵ(n)=dnμ(d)I(n/d)

  2. μ ∗ I d = ϕ \mu * Id = \phi μId=ϕ

    莫比乌斯反演形式:

    $\because n=\sum_{d|n}\phi(n/d) $

    ∴ ϕ ( n ) = ∑ d ∣ n μ ( d ) ∗ I d ( n / d ) \therefore \phi(n) = \sum_{d|n}\mu(d)*Id(n/d) ϕ(n)=dnμ(d)Id(n/d)

  3. I ∗ I d = σ I*Id=\sigma IId=σ

    σ ( n ) = ∑ d ∣ n d \sigma(n)=\sum_{d|n}d σ(n)=dnd

  4. ϕ ∗ I = I d \phi*I=Id ϕI=Id

    同2, 即$n=\sum_{d|n}\phi(n/d) $

  5. σ ∗ μ = I d \sigma * \mu = Id σμ=Id, 同 3 3 3, 左右同时乘以 I I I即可.

σ ∗ μ = I d σ ∗ μ ∗ I = I d ∗ I σ = I d ∗ I \begin{aligned} \sigma * \mu &= Id \\ \sigma * \mu * I &= Id * I \\ \sigma &= Id * I \end{aligned} σμσμIσ=Id=IdI=IdI

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值