Q : Q: Q : 请以 O ( N ) O(sqrt{N}) O ( N ) 的时间复杂度求解下式 ↓ ↓ ↓ ∑ i = 1 N ⌊ N i ⌋ sum_{i=1}^Nlfloorfrac{N}{i}
floor i = 1 ∑ N ⌊ i N ⌋
A : A: A : ⌊ N i ⌋ lfloorfrac{N}{i}
floor ⌊ i N ⌋ 这个数列是 呈块状连续分布 的, 设某个块的 左端点 为 l l l , 则这个块的 右端点 为 N N / l frac{N}{N/l} N / l N (向下取整略) ,
于是该块的和为 ( r − l + 1 ) ∗ ⌊ N l ⌋ (r-l+1)*lfloorfrac{N}{l}
floor ( r − l + 1 ) ∗ ⌊ l N ⌋ ,
代码很简短:
for ( reg int l = 1 , r; l <= N; l = r+ 1 ) {
r = N/ ( N/ l) ;
tmp + = ( r- l+ 1 ) * ( N/ l) ;
}
定 义 : 定义: 定 义 :
设 n = p 1 k 1 ∗ p 2 k 2 . . . . . . p m k m n=p_1^{k_1}*p_2^{k_2}......p_m^{k_m} n = p 1 k 1 ∗ p 2 k 2 . . . . . . p m k m
μ ( n ) = { 1 n = 1 ( − 1 ) m ∏ i = 1 m k i = 1 0 e l s e mu(n)= egin{cases}
1 n=1 \
(-1)^m prod_{i=1}^mk_i=1\
0 else
end{cases} μ ( n ) = ⎩ ⎪ ⎨ ⎪ ⎧ 1 n = 1 ( − 1 ) m ∏ i = 1 m k i = 1 0 e l s e
可以看出有 单 个 质 因 子 的 幂 数 超 过 1 单个质因子的幂数超过1 单 个 质 因 子 的 幂 数 超 过 1 的数字 莫比乌斯函数 值为 0 0 0 .
性 质 : 性质: 性 质 :
性 质 1 : 性质1: 性 质 1 : 莫比乌斯函数是 积性函数 :
μ ( a ∗ b ) = μ ( a ) ∗ μ ( b ) g c d ( a , b ) = 1 mu(a*b)=mu(a)*mu(b) gcd(a,b)=1 μ ( a ∗ b ) = μ ( a ) ∗ μ ( b ) g c d ( a , b ) = 1
根据这个性质, 可以 O ( N ) O(N) O ( N ) 进行 线性筛 ,
若当前数字 i i i 为质数, μ ( i ) = − 1 mu(i)=-1 μ ( i ) = − 1 ,
若 i % p j = = 0 i\%p_j == 0 i % p j = = 0 , 说明 i ∗ p j i*p_j i ∗ p j 已经含有幂数大于1 1 1 的质因子, 所以μ ( i ∗ p j ) = 0 mu(i*p_j)=0 μ ( i ∗ p j ) = 0 ,
否则说明 i i i 的质因子与 p j p_j p j 共同构成 i ∗ p j i*p_j i ∗ p j 的质因子,
于是 μ ( i ∗ p j ) = μ ( p j ) ∗ μ ( i ) = − μ ( i ) mu(i*p_j)=mu(p_j)*mu(i)=-mu(i) μ ( i ∗ p j ) = μ ( p j ) ∗ μ ( i ) = − μ ( i ) ,
这个式子同时处理了 μ ( i ) = 0 mu(i)=0 μ ( i ) = 0 的情况 .
void sieve ( ) {
mu[ 1 ] = 1 , p_cnt = 0 ;
for ( reg int i = 2 ; i < maxn; i ++ ) {
if ( ! Used[ i] ) p[ ++ p_cnt] = i, mu[ i] = - 1 ;
for ( reg int j = 1 ; j <= p_cnt && i* p[ j] < maxn; j ++ ) {
Used[ i* p[ j] ] = 1 ;
if ( i% p[ j] == 0 ) { mu[ i* p[ j] ] = 0 ; break ; }
else mu[ i* p[ j] ] = - mu[ i] ;
}
}
}
性 质 2 : 性质2: 性 质 2 :
∑ d ∣ N μ ( d ) = [ N = = 1 ] sum_{d|N}mu(d)=[N==1] d ∣ N ∑ μ ( d ) = [ N = = 1 ]
证明:
N = 1 N=1 N = 1 时, μ ( 1 ) = 1 mu(1)=1 μ ( 1 ) = 1 .
N ! = 1 N!=1 N ! = 1 时,
N = p 1 k 1 ∗ p 2 k 2 . . . . . . p m k m N=p_1^{k_1}*p_2^{k_2}......p_m^{k_m} N = p 1 k 1 ∗ p 2 k 2 . . . . . . p m k m , d = p 1 q 1 ∗ p 2 q 2 . . . . . . p m q m d=p_1^{q_1}*p_2^{q_2}......p_m^{q_m} d = p 1 q 1 ∗ p 2 q 2 . . . . . . p m q m ,
由于 质因子幂 大于 1 1 1 的 μ mu μ 值为 0 0 0 , 所以只需考虑 幂 为 0 , 1 0,1 0 , 1 的质因子项,
∑ d ∣ N μ ( d ) = ∑ i = 0 m ( m i ) ∗ ( − 1 ) i sum_{d|N}mu(d)=sum_{i=0}^m egin{pmatrix}m \ iend{pmatrix}*(-1)^i d ∣ N ∑ μ ( d ) = i = 0 ∑ m ( m i ) ∗ ( − 1 ) i
因为有 二项式定理 , 所以
原 式 = ∑ i = 0 m ( m i ) ∗ ( − 1 ) i ∗ 1 m − i = ( 1 − 1 ) m = 0 原式 = sum_{i=0}^m egin{pmatrix}m \ iend{pmatrix}*(-1)^i*1^{m-i}\
\
=(1-1)^m\
\
=0 原 式 = i = 0 ∑ m ( m i ) ∗ ( − 1 ) i ∗ 1 m − i = ( 1 − 1 ) m = 0
证毕.
二 项 式 定 理 : 二项式定理: 二 项 式 定 理 : ( x + y ) n = ∑ k = 0 n ( n i ) x n − k y n (x+y)^n=sum_{k=0}^{n}egin{pmatrix}n \ iend{pmatrix}x^{n-k}y^n ( x + y ) n = k = 0 ∑ n ( n i ) x n − k y n
若 f ( n ) , g ( n ) f(n),g(n) f ( n ) , g ( n ) 为数论函数, 且
f ( N ) = ∑ d ∣ N g ( d ) f(N)=sum_{d|N}g(d) f ( N ) = d ∣ N ∑ g ( d )
则 莫比乌斯反演 为:
g ( d ) = ∑ d ∣ N μ ( N d ) f ( d ) 或 者 ∑ d ∣ N μ ( d ) f ( N d ) g(d)=sum_{d|N}mu(frac{N}{d})f(d) 或者 sum_{d|N}mu(d)f(frac{N}{d}) g ( d ) = d ∣ N ∑ μ ( d N ) f ( d ) 或 者 d ∣ N ∑ μ ( d ) f ( d N )
证明:
∑ d ∣ N μ ( d ) f ( N d ) = ∑ d ∣ N μ ( d ) ∑ i ∣ N d g ( i ) = ∑ i ∣ N g ( i ) ∑ k ∣ N i μ ( k ) = g ( N ) sum_{d|N}mu(d)f(frac{N}{d})\
\
= sum_{d|N}mu(d)sum_{i|frac{N}{d}}g(i) \
\
= sum_{i|N} g(i) sum_{k|frac{N}{i}} mu(k) \
\
= g(N)
d ∣ N ∑ μ ( d ) f ( d N ) = d ∣ N ∑ μ ( d ) i ∣ d N ∑ g ( i ) = i ∣ N ∑ g ( i ) k ∣ i N ∑ μ ( k ) = g ( N )
证毕.
说一下从第二步到怎么到第三步的,
先看第二步推导的含义: 枚举 N N N 的约数 d d d , 然后再去找与μ ( d ) mu(d) μ ( d ) 相乘的 g ( i ) g(i) g ( i ) ,
分析 d d d 与 i i i 之间的关系, i ∗ t = N d i*t = frac{N}{d} i ∗ t = d N (t t t 为正整数), 进而得到 d ∗ t = N i d*t=frac{N}{i} d ∗ t = i N , 即 d ∣ N i d|frac{N}{i} d ∣ i N ,
于是枚举 i i i , 再枚举 N i frac{N}{i} i N 的约数进行计算, 即第三步
莫 比 乌 斯 反 演 的 变 形 莫比乌斯反演的变形 莫 比 乌 斯 反 演 的 变 形
若 F ( x ) = ∑ d = 1 ⌊ N x ⌋ g ( d x ) F(x)=sum_{d=1}^{lfloor frac{N}{x}
floor}g(dx) F ( x ) = d = 1 ∑ ⌊ x N ⌋ g ( d x )
则 g ( x ) = ∑ d = 1 ⌊ N x ⌋ F ( d x ) μ ( d ) g(x)=sum_{d=1}^{lfloor frac{N}{x}
floor}F(dx)mu(d) g ( x ) = d = 1 ∑ ⌊ x N ⌋ F ( d x ) μ ( d )
证 明 : 证明: 证 明 :
∑ d = 1 ⌊ N x ⌋ F ( d x ) μ ( d ) = ∑ d = 1 ⌊ N x ⌋ μ ( d ) ∑ i = 1 ⌊ N d x ⌋ g ( i ∗ d x ) sum_{d=1}^{lfloor frac{N}{x}
floor}F(dx)mu(d)\
= sum_{d=1}^{lfloor frac{N}{x}
floor} mu(d) sum_{i=1}^{lfloorfrac{N}{dx}
floor} g(i*dx)\
d = 1 ∑ ⌊ x N ⌋ F ( d x ) μ ( d ) = d = 1 ∑ ⌊ x N ⌋ μ ( d ) i = 1 ∑ ⌊ d x N ⌋ g ( i ∗ d x )
设 i ∗ d = t ( t ∈ [ 1 , ⌊ N x ⌋ ] ) i*d=t (t∈[1,lfloorfrac{N}{x}
floor]) i ∗ d = t ( t ∈ [ 1 , ⌊ x N ⌋ ] ) , 则 d = t / i d = t/i d = t / i , 即 d ∣ t d|t d ∣ t .
即与 F ( t x ) F(tx) F ( t x ) 进行运算的是 μ ( t / i ) mu(t/i) μ ( t / i ) .
于是枚举 t t t , 得到 ↓ ↓ ↓
原 式 = ∑ t = 1 ⌊ N x ⌋ g ( t x ) ∑ d ∣ t μ ( d ) = g ( x ) 原式 = sum_{t=1}^{lfloorfrac{N}{x}
floor}g(tx)sum_{d|t}mu(d)\
= g(x)
原 式 = t = 1 ∑ ⌊ x N ⌋ g ( t x ) d ∣ t ∑ μ ( d ) = g ( x )
证毕.
莫 比 乌 斯 反 演 的 应 用 莫比乌斯反演的应用 莫 比 乌 斯 反 演 的 应 用
求 解 g c d ( i , j ) = 1 的 对 数 color{blue}{求解gcd(i,j)=1的对数} 求 解 g c d ( i , j ) = 1 的 对 数
解 法 : 解法 : 解 法 :
∑ i = 1 n ∑ j = 1 m [ g c d ( i , j ) = 1 ] ( n < m ) (1) sum_{i=1}^nsum_{j=1}^m[gcd(i,j)=1] (n<m) ag{1} i = 1 ∑ n j = 1 ∑ m [ g c d ( i , j ) = 1 ] ( n < m ) ( 1 )
前面提到莫比乌斯函数的 性质2 : ∑ i ∣ N μ ( i ) = [ N = = 1 ] sum_{i|N}mu(i)=[N==1] i ∣ N ∑ μ ( i ) = [ N = = 1 ]
将 N N N 换成 g c d ( i , j ) gcd(i,j) g c d ( i , j ) 得到 : ∑ i ∣ g c d ( i , j ) μ ( i ) = [ g c d ( i , j ) = 1 ] sum_{i|gcd(i,j)}mu(i)=[gcd(i,j)=1] i ∣ g c d ( i , j ) ∑ μ ( i ) = [ g c d ( i , j ) = 1 ]
再代入 1 1 1 式: ∑ i = 1 n ∑ j = 1 m ∑ d ∣ g c d ( i , j ) μ ( d ) sum_{i=1}^nsum_{j=1}^msum_{d|gcd(i,j)}mu(d) i = 1 ∑ n j = 1 ∑ m d ∣ g c d ( i , j ) ∑ μ ( d )
再将 d d d 提出来 :
∑ d = 1 n ⌊ n d ⌋ ⌊ m d ⌋ μ ( d ) sum_{d=1}^{n}lfloor frac{n}{d}
floor lfloor frac{m}{d}
floor mu(d) d = 1 ∑ n ⌊ d n ⌋ ⌊ d m ⌋ μ ( d )
求 解 g c d ( i , j ) = k 的 对 数 color{blue}{求解gcd(i,j)=k的对数} 求 解 g c d ( i , j ) = k 的 对 数
解 法 1 : 解法 1: 解 法 1 :
将上方式子n , m n,m n , m 换为 ⌊ n k ⌋ , ⌊ m k ⌋ lfloor frac{n}{k}
floor, lfloor frac{m}{k}
floor ⌊ k n ⌋ , ⌊ k m ⌋ 即可.
解 法 2 : 解法 2: 解 法 2 :
前面提到莫比乌斯反演的 变形 :
若 F ( x ) = ∑ d = 1 N x g ( d x ) F(x)=sum_{d=1}^{frac{N}{x}}g(dx) F ( x ) = ∑ d = 1 x N g ( d x ) , 则 g ( x ) = ∑ d = 1 N x F ( d x ) μ ( d ) g(x)=sum_{d=1}^{frac{N}{x}}F(dx)mu(d) g ( x ) = ∑ d = 1 x N F ( d x ) μ ( d ) ,
于是设 f ( k ) f(k) f ( k ) 为 g c d ( i , j ) = k gcd(i,j)=k g c d ( i , j ) = k 的对数, g ( k ) g(k) g ( k ) 为 k ∣ g c d ( i , j ) k|gcd(i,j) k ∣ g c d ( i , j ) 的对数, 显然有
g ( k ) = ∑ i = 1 ⌊ N k ⌋ f ( i ∗ k ) = ⌊ n k ⌋ ⌊ m k ⌋ g(k)=sum_{i=1}^{lfloorfrac{N}{k}
floor}f(i*k) = lfloor frac{n}{k}
floor lfloor frac{m}{k}
floor g ( k ) = i = 1 ∑ ⌊ k N ⌋ f ( i ∗ k ) = ⌊ k n ⌋ ⌊ k m ⌋
于是参照 莫比乌斯反演的变形 . 得到
f ( k ) = ∑ x = 1 ⌊ N k ⌋ g ( k x ) μ ( x ) = ∑ x = 1 ⌊ N k ⌋ ⌊ n k x ⌋ ⌊ m k x ⌋ μ ( x ) f(k) = sum_{x=1}^{lfloorfrac{N}{k}
floor}g(kx)mu(x)\
= sum_{x=1}^{lfloorfrac{N}{k}
floor}lfloor frac{n}{kx}
floor lfloor frac{m}{kx}
floor mu(x) f ( k ) = x = 1 ∑ ⌊ k N ⌋ g ( k x ) μ ( x ) = x = 1 ∑ ⌊ k N ⌋ ⌊ k x n ⌋ ⌊ k x m ⌋ μ ( x )
再 提 整 除 分 块 : 再提整除分块: 再 提 整 除 分 块 :
将 ⌊ n k x ⌋ ⌊ m k x ⌋ lfloor frac{n}{kx}
floor lfloor frac{m}{kx}
floor ⌊ k x n ⌋ ⌊ k x m ⌋ 整除分块时, 要保证块内 ⌊ n k x ⌋ ⌊ m k x ⌋ lfloor frac{n}{kx}
floor lfloor frac{m}{kx}
floor ⌊ k x n ⌋ ⌊ k x m ⌋ 相同, 每次可能就需要一个指针 “委曲求全”,
具体的说:
一个指针同时处理 n , m n,m n , m 的块, 从起点1 1 1 出发, 则下一步需要走到 r = m i n ( n / ( n / l ) , m / ( m / l ) ) r=min(n/(n/l), m/(m/l)) r = m i n ( n / ( n / l ) , m / ( m / l ) ) .
求 解 g c d ( i , j ) 的 幂 color{blue}{求解gcd(i,j)的幂} 求 解 g c d ( i , j ) 的 幂
∑ i = 1 N ∑ j = 1 M g c d ( i , j ) k sum_{i=1}^Nsum_{j=1}^Mgcd(i,j)^k i = 1 ∑ N j = 1 ∑ M g c d ( i , j ) k
解 法 : 解法 : 解 法 :
待填坑…