积性函数
对 于 g c d ( a , b ) = 1 , 都 有 f ( a b ) = f ( a ) ∗ f ( b ) 。 那 么 f ( n ) 是 积 性 函 数 对于gcd(a,b)=1, 都有 f(ab)=f(a)*f(b)。那么f(n)是积性函数 对 于 g c d ( a , b ) = 1 , 都 有 f ( a b ) = f ( a ) ∗ f ( b ) 。 那 么 f ( n ) 是 积 性 函 数
欧拉函数ϕ ( n ) \phi(n) ϕ ( n ) 是一个积性函数,对于一个素数p p p 。有:ϕ ( p ) = p − 1 \phi(p)=p-1 ϕ ( p ) = p − 1 , ϕ ( p k ) = p k − p k − 1 = ( p − 1 ) p k − 1 \phi(p^k)=p^k-p^{k-1}=(p-1)p^{k-1} ϕ ( p k ) = p k − p k − 1 = ( p − 1 ) p k − 1 第一个就根据定义理解,第二个就稍微容斥一下就可以了。
莫比乌斯函数μ \mu μ
莫比乌斯函数完整定义的通俗表达:
1)莫比乌斯函数μ ( n ) μ(n) μ ( n ) 的定义域是N N N
2)μ ( 1 ) = 1 μ(1)=1 μ ( 1 ) = 1
3)当n n n 存在平方因子时,μ ( n ) = 0 μ(n)=0 μ ( n ) = 0
4)当n n n 是素数或奇数个不同素数之积时,μ ( n ) = − 1 μ(n)=-1 μ ( n ) = − 1
5)当n n n 是偶数个不同素数之积时,μ ( n ) = 1 μ(n)=1 μ ( n ) = 1
性质:当n n n 不为1 1 1 时,n n n 的所有因子的μ \mu μ 之和等于0 0 0
∑ d ∣ n μ ( d ) = 0 , ( n ! = 1 ) {\sum_{d|n}\mu(d)}=0,\ (n\ \ !=1) ∑ d ∣ n μ ( d ) = 0 , ( n ! = 1 )
性质:∑ d ∣ n μ ( d ) d = ϕ ( n ) n \sum_{d|n}{\frac{\mu(d)}{d}}=\frac{\phi(n)}{n} ∑ d ∣ n d μ ( d ) = n ϕ ( n )
求μ \mu μ ?
Θ ( n ) \Theta(n) Θ ( n ) 线性筛求出1~n的μ \mu μ
inline void eluer ( ) {
vis[ 1 ] = 1 ; mu[ 1 ] = 1 ;
for ( int i = 2 ; i < N; ++ i) {
if ( ! vis[ i] ) {
prime[ ++ tot] = i;
mu[ i] = - 1 ;
}
for ( int j = 1 ; j <= tot; ++ j) {
LL cur = i * prime[ j] ;
if ( cur >= ( LL) N) break ;
vis[ cur] = 1 ;
if ( i % prime[ j] == 0 ) {
mu[ cur] = 0 ;
break ;
}
else mu[ cur] = - mu[ i] ;
}
}
}
解释和说明:如果i % p r i m e [ j ] = 0 i\%prime[j]=0 i % p r i m e [ j ] = 0 的话 ,说明c u r cur c u r 中p r i m e [ j ] prime[j] p r i m e [ j ] 因子至少已经出现了2次。否则因为μ \mu μ 是积性函数,i i i 和p r i m e [ j ] prime[j] p r i m e [ j ] 又显然互质,所以μ ( c u r ) = μ ( i ) ∗ μ ( p r i m e [ j ] ) = − μ ( i ) \mu(cur)=\mu(i)*\mu(prime[j])=-\mu(i) μ ( c u r ) = μ ( i ) ∗ μ ( p r i m e [ j ] ) = − μ ( i ) 。
求ϕ \phi ϕ ?
Θ ( n ) \Theta(n) Θ ( n ) 线性筛求1~n的ϕ \phi ϕ
inline void eluer ( ) {
vis[ 1 ] = 1 ; phi[ 1 ] = 1 ;
for ( int i = 1 ; i < N; ++ i) {
if ( ! vis[ i] ) {
prime[ ++ tot] = i;
phi[ i] = i - 1 ;
}
for ( int j = 1 ; j <= tot; ++ j) {
LL cur = i * prime[ j] ;
if ( cur >= N) break ;
vis[ cur] = 1 ;
if ( i % prime[ j] == 0 ) {
phi[ cur] = phi[ i] * prime[ j] ;
break ;
}
else phi[ cur] = phi[ i] * ( prime[ j] - 1 ) ;
}
}
}
解释和说明:首先如果p p p 为一个质数,自然ϕ ( p ) = p − 1 \phi(p)=p-1 ϕ ( p ) = p − 1 。当i % p r i m e [ j ] = 0 i\%prime[j]=0 i % p r i m e [ j ] = 0 时,i i i “包含”了p r i m e [ j ] prime[j] p r i m e [ j ] ,所以p r i m e [ j ] prime[j] p r i m e [ j ] 对c u r cur c u r 的质因子的数目没有新的贡献。(不妨考虑根据素因子来计算ϕ \phi ϕ 的那个式子,就只有前面的n n n 扩大了,质因子都是不变的,正确性显然啦! )所以ϕ [ c u r ] = ϕ [ i ] ∗ p r i m e [ j ] \phi[cur]=\phi[i]*prime[j] ϕ [ c u r ] = ϕ [ i ] ∗ p r i m e [ j ] 。当i % p r i m e [ j ] ! = 0 i\%prime[j]!=0 i % p r i m e [ j ] ! = 0 时,i 和 p r i m e [ j ] i和prime[j] i 和 p r i m e [ j ] 显然互质,根据ϕ \phi ϕ 是一个积性函数,有ϕ [ c u r ] = ϕ [ i ] ∗ ϕ [ p r i m e [ j ] ] = ϕ [ i ] ∗ ( p r i m e [ j ] − 1 ) \phi[cur]=\phi[i]*\phi[ prime[j]]=\phi[i]*(prime[j]-1) ϕ [ c u r ] = ϕ [ i ] ∗ ϕ [ p r i m e [ j ] ] = ϕ [ i ] ∗ ( p r i m e [ j ] − 1 ) 。
求1~n的约数个数
inline void eluer ( ) {
vis[ 1 ] = 1 ; f[ 1 ] = 1 ;
for ( int i = 2 ; i < N; ++ i) {
if ( ! vis[ i] ) {
prime[ ++ tot] = i;
f[ i] = 2 ;
d[ i] = 1 ;
}
for ( int j = 1 ; j <= tot; ++ j) {
LL cur = 1LL * i * prime[ j] ;
if ( cur >= N) break ;
vis[ cur] = 1 ;
if ( ! ( i % prime[ j] ) ) {
f[ cur] = f[ i] / ( d[ i] + 1 ) * ( d[ i] + 2 ) ;
d[ cur] = d[ i] + 1 ;
break ;
}
else {
f[ cur] = f[ i] * 2 ;
d[ cur] = 1 ;
}
}
}
}
解释和说明:f [ i ] f[i] f [ i ] 表示i i i 的约数个数,d [ i ] d[i] d [ i ] 表示i i i 的最小质因子的次幂。
如果i i i 为质数,没什么好说的。 c u r cur c u r 一定是被它的最小素因子p r i m e [ j ] prime[j] p r i m e [ j ] 给筛掉的。所以如果p r i m e [ j ] ∣ i prime[j]|i p r i m e [ j ] ∣ i 的话,意会一下是c u r cur c u r 有平方因子p r i m e [ j ] prime[j] p r i m e [ j ] 。所以要重新算p r i m e [ j ] prime[j] p r i m e [ j ] 的次数的贡献。若p r i m e ! ∣ j prime!|j p r i m e ! ∣ j ,因为f f f 是积性函数,f ( c u r ) = f ( i ) ∗ f ( p r i m e [ j ] ) = 2 f ( i ) f(cur)=f(i)*f(prime[j])=2f(i) f ( c u r ) = f ( i ) ∗ f ( p r i m e [ j ] ) = 2 f ( i ) ,最小素因子为p r i m e [ j ] prime[j] p r i m e [ j ] 。
莫比乌斯反演
其实莫比乌斯反演的式子和狄利克雷卷积是密不可分的。
莫比乌斯反演一般可以处理这样一个形式的题目:
如果你有一些限制,你要求解满足这些限制的一些数或者数对的个数。
记f ( n ) f(n) f ( n ) 表示n n n 这个范围之内的答案,F ( n ) = ∑ d ∣ n f ( d ) F(n)=\sum_{d|n}f(d) F ( n ) = ∑ d ∣ n f ( d ) (其实F = f ∗ 1 F=f*1 F = f ∗ 1 )。
那么根据后面的数论函数的相关内容:F = f ∗ 1 < = > F ∗ μ = f ∗ 1 ∗ μ < = > F ∗ μ = f ∗ ϵ = f F=f*1\quad <=>\quad F*\mu=f*1*\mu\quad<=>F*\mu=f*\epsilon=f F = f ∗ 1 < = > F ∗ μ = f ∗ 1 ∗ μ < = > F ∗ μ = f ∗ ϵ = f
故:f ( n ) = ∑ d ∣ n μ ( d ) ∗ F ( n d ) ( 1 ) f(n)=\sum_{d|n}\mu(d)*F(\frac{n}{d})\quad(1) f ( n ) = ∑ d ∣ n μ ( d ) ∗ F ( d n ) ( 1 )
如果我们规定F ( n ) = ∑ n ∣ d f ( d ) F(n)=\sum_{n|d}f(d) F ( n ) = ∑ n ∣ d f ( d ) 的话:
同理有f ( n ) = ∑ n ∣ d μ ( d n ) ∗ F ( d ) ( 2 ) f(n)=\sum_{n|d}\mu(\frac{d}{n})*F(d)\quad(2) f ( n ) = ∑ n ∣ d μ ( n d ) ∗ F ( d ) ( 2 )
一个较好的证明
https://blog.csdn.net/outer_form/article/details/50588307
一个非常适合初学者的blog(可以说是莫反最简化的一种理解)
https://www.luogu.org/blog/An-Amazing-Blog/mu-bi-wu-si-fan-yan-ji-ge-ji-miao-di-dong-xi
初等变换 [ A = 1 ] = ∑ d ∣ A μ ( d ) [A = 1] = \sum_{d|A}\mu(d) [ A = 1 ] = ∑ d ∣ A μ ( d )
(虽说这个初等变换不能解决所有需要反演的问题,但是一些简单的g c d gcd g c d 相关反演题用这个会容易理解容易推导。但是难题(hdu6248)什么的还是要好好构造反演。
那么,如果我们要求f ( n ) f(n) f ( n ) 的话,用1 1 1 式或2 2 2 式就可以把它转化为求另外一些函数的前缀和与数论分块问题了。。
spoj divcnt1
求∑ i = 1 n σ 0 ( i ) \sum_{i=1}^n\sigma_0(i) ∑ i = 1 n σ 0 ( i ) 。 要求Θ ( ( n ) ) \Theta(\sqrt(n)) Θ ( ( n ) )
∑ i = 1 n ∑ d ∣ i 1 = ∑ d = 1 n ∑ i = 1 n d 1 = ∑ d = 1 n n d \sum_{i=1}^n\sum_{d|i}1=\sum_{d=1}^{n}\sum_{i=1}^{\frac{n}{d}}1=\sum_{d=1}^{n}\frac{n}{d} ∑ i = 1 n ∑ d ∣ i 1 = ∑ d = 1 n ∑ i = 1 d n 1 = ∑ d = 1 n d n
数论分块。和l u o g u P 3935 luoguP3935 l u o g u P 3 9 3 5 一样。
一个题
求∑ i = 1 n ∑ j = 1 m [ g c d ( i , j ) = 1 ] ( n < m ) \sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)=1](n<m) ∑ i = 1 n ∑ j = 1 m [ g c d ( i , j ) = 1 ] ( n < m )
∑ i = 1 n ∑ j = 1 m [ g c d ( i , j ) = 1 ] ( n < m ) \sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)=1](n<m) ∑ i = 1 n ∑ j = 1 m [ g c d ( i , j ) = 1 ] ( n < m )
= ∑ i = 1 n ∑ j = 1 m ∑ d ∣ g c d ( i , j ) μ ( d ) =\sum_{i=1}^n\sum_{j=1}^m\sum_{d|gcd(i,j)}\mu(d) = ∑ i = 1 n ∑ j = 1 m ∑ d ∣ g c d ( i , j ) μ ( d )
= ∑ d = 1 n μ ( d ) ∗ ⌊ n d ⌋ ∗ ⌊ m d ⌋ =\sum_{d=1}^n\mu(d)*\lfloor\frac{n}{d}\rfloor*\lfloor\frac{m}{d}\rfloor = ∑ d = 1 n μ ( d ) ∗ ⌊ d n ⌋ ∗ ⌊ d m ⌋
所以对⌊ n d ⌋ ∗ ⌊ m d ⌋ \lfloor\frac{n}{d}\rfloor*\lfloor\frac{m}{d}\rfloor ⌊ d n ⌋ ∗ ⌊ d m ⌋ 数论分块,计算一个μ \mu μ 的前缀和就好了。
luoguP2522/P3455
求∑ i = a b ∑ j = c d [ g c d ( i , j ) = k ] \sum_{i=a}^b\sum_{j=c}^d[gcd(i,j)=k] ∑ i = a b ∑ j = c d [ g c d ( i , j ) = k ]
这个计数问题依然有前缀性质,如果我们把i , j i,j i , j 这两维看成二维矩阵的话。就可以用二维前缀和来做。
所以就化为统计∑ i = 1 n ∑ j = 1 m [ g c d ( i , j ) = k ] \sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)=k] ∑ i = 1 n ∑ j = 1 m [ g c d ( i , j ) = k ] 的答案
考虑把它转为上题,= ∑ i = 1 ⌊ n k ⌋ ∑ j = 1 ⌊ m k ⌋ [ g c d ( i , j ) = 1 ] =\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}[gcd(i,j)=1] = ∑ i = 1 ⌊ k n ⌋ ∑ j = 1 ⌊ k m ⌋ [ g c d ( i , j ) = 1 ] a s a m e p r o b l e m ! a\ same\ problem! a s a m e p r o b l e m ! O ( n s q r t ( n ) ) O(nsqrt(n)) O ( n s q r t ( n ) )
设f ( k ) = ∑ i = 1 n ∑ j = 1 m [ g c d ( i , j ) = k ] , F ( n ) = ∑ n ∣ t f ( t ) f(k)=\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)=k],F(n)=\sum_{n|t}f(t) f ( k ) = ∑ i = 1 n ∑ j = 1 m [ g c d ( i , j ) = k ] , F ( n ) = ∑ n ∣ t f ( t )
F ( n ) F(n) F ( n ) 的意义就是含有n n n 这个因子的对数。F ( x ) = ⌊ a x ⌋ ∗ ⌊ b x ⌋ ( a < b ) F(x)=\lfloor\frac{a}{x}\rfloor*\lfloor\frac{b}{x}\rfloor(a<b) F ( x ) = ⌊ x a ⌋ ∗ ⌊ x b ⌋ ( a < b )
根据莫反第二形式:f ( k ) = ∑ k ∣ t μ ( t k ) , F ( t ) = ∑ k ∣ t μ ( t k ) ⌊ a t ⌋ ∗ ⌊ b t ⌋ f(k)=\sum_{k|t}\mu(\frac{t}{k}),F(t)=\sum_{k|t}\mu(\frac{t}{k})\lfloor\frac{a}{t}\rfloor*\lfloor\frac{b}{t}\rfloor f ( k ) = ∑ k ∣ t μ ( k t ) , F ( t ) = ∑ k ∣ t μ ( k t ) ⌊ t a ⌋ ∗ ⌊ t b ⌋
设t k = x \frac{t}{k}=x k t = x ,f ( k ) = ∑ x = 1 ⌊ a k ⌋ μ ( x ) ⌊ a x k ⌋ ∗ ⌊ b x k ⌋ f(k)=\sum_{x=1}^{\lfloor\frac{a}{k}\rfloor}\mu(x)\lfloor\frac{a}{xk}\rfloor*\lfloor\frac{b}{xk}\rfloor f ( k ) = ∑ x = 1 ⌊ k a ⌋ μ ( x ) ⌊ x k a ⌋ ∗ ⌊ x k b ⌋
所以对⌊ a x k ⌋ ∗ ⌊ b x k ⌋ \lfloor\frac{a}{xk}\rfloor*\lfloor\frac{b}{xk}\rfloor ⌊ x k a ⌋ ∗ ⌊ x k b ⌋ 数论分块就行了。
一个题
给定n , m n,m n , m ,求∑ i = 1 n ∑ j = 1 m i j [ g c d ( i , j ) = = k ] ( n < m ) \sum_{i=1}^n\sum_{j=1}^mij[gcd(i,j)==k](n<m) ∑ i = 1 n ∑ j = 1 m i j [ g c d ( i , j ) = = k ] ( n < m )
和上面一样,我们还是考虑把是k k k 的整倍数的那些i , j i,j i , j 同时除以k k k = ∑ i = 1 ⌊ n k ⌋ ∑ j = 1 ⌊ m k ⌋ i j [ g c d ( i , j ) = = 1 ] k 2 =\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}ij[gcd(i,j)==1]k^2 = ∑ i = 1 ⌊ k n ⌋ ∑ j = 1 ⌊ k m ⌋ i j [ g c d ( i , j ) = = 1 ] k 2
= ∑ i = 1 ⌊ n k ⌋ ∑ j = 1 ⌊ m k ⌋ i j ∑ d ∣ g c d ( i , j ) μ ( d ) k 2 =\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}ij\sum_{d|gcd(i,j)}\mu(d)k^2 = ∑ i = 1 ⌊ k n ⌋ ∑ j = 1 ⌊ k m ⌋ i j ∑ d ∣ g c d ( i , j ) μ ( d ) k 2
= k 2 ∑ d = 1 ⌊ n k ⌋ d 2 μ ( d ) ∑ i = 1 ⌊ n k d ⌋ i ∑ j = 1 ⌊ m k d ⌋ j =k^2\sum_{d=1}^{\lfloor\frac{n}{k}\rfloor}d^2\mu(d)\sum_{i=1}^{\lfloor\frac{n}{kd}\rfloor}i\sum_{j=1}^{\lfloor\frac{m}{kd}\rfloor}j = k 2 ∑ d = 1 ⌊ k n ⌋ d 2 μ ( d ) ∑ i = 1 ⌊ k d n ⌋ i ∑ j = 1 ⌊ k d m ⌋ j
我们发现可以预处理∑ d = 1 ⌊ n k ⌋ d 2 μ ( d ) \sum_{d=1}^{\lfloor\frac{n}{k}\rfloor}d^2\mu(d) ∑ d = 1 ⌊ k n ⌋ d 2 μ ( d ) 的前缀和,对后面那一坨数论分块算等差数列平方,最后a n s ∗ = k 2 ans*=k^2 a n s ∗ = k 2 就好了。(把n k \frac{n}{k} k n 视作n n n ,m k \frac{m}{k} k m 视作m m m ,就是有两个限制的数论分块了。)O ( n + s q r t ( n ) ) O(n+sqrt(n)) O ( n + s q r t ( n ) )
一个题
求∑ i = 1 n ∑ j = 1 m l c m ( i , j ) \sum_{i=1}^n\sum_{j=1}^mlcm(i,j) ∑ i = 1 n ∑ j = 1 m l c m ( i , j )
因为,l c m ( i , j ) = i ∗ j g c d ( i , j ) lcm(i,j)=\frac{i*j}{gcd(i,j)} l c m ( i , j ) = g c d ( i , j ) i ∗ j
仍然是老套路,枚举 g c d ( i , j ) gcd(i,j) g c d ( i , j ) = ∑ d = 1 n ∑ i = 1 n ∑ j = 1 m i ∗ j d ∗ [ g c d ( i , j ) = d ] =\sum_{d=1}^{n}\sum_{i=1}^{n}\sum_{j=1}^{m}\frac{i*j}{d}*[gcd(i,j)=d] = d = 1 ∑ n i = 1 ∑ n j = 1 ∑ m d i ∗ j ∗ [ g c d ( i , j ) = d ]
同时除以 d d d = ∑ d = 1 n ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ⌊ m d ⌋ i ∗ j ∗ d ∗ [ g c d ( i , j ) = 1 ] =\sum_{d=1}^{n}\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}i*j*d*[gcd(i,j)=1] = d = 1 ∑ n i = 1 ∑ ⌊ d n ⌋ j = 1 ∑ ⌊ d m ⌋ i ∗ j ∗ d ∗ [ g c d ( i , j ) = 1 ] = ∑ d = 1 n ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ⌊ m d ⌋ i ∗ j ∗ d ∑ k ∣ g c d ( i , j ) μ ( k ) =\sum_{d=1}^{n}\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}i*j*d\sum_{k|gcd(i,j)}\mu(k) = d = 1 ∑ n i = 1 ∑ ⌊ d n ⌋ j = 1 ∑ ⌊ d m ⌋ i ∗ j ∗ d k ∣ g c d ( i , j ) ∑ μ ( k )
枚举 k k k = ∑ d = 1 n d ∑ k = 1 ⌊ n d ⌋ μ ( k ) ∗ k 2 ∑ i = 1 ⌊ n d k ⌋ i ∑ j = 1 ⌊ m d k ⌋ j =\sum_{d=1}^{n}d\sum_{k=1}^{\lfloor\frac{n}{d}\rfloor}\mu(k)*k^2\sum_{i=1}^{\lfloor\frac{n}{dk}\rfloor}i\sum_{j=1}^{\lfloor\frac{m}{dk}\rfloor}j = d = 1 ∑ n d k = 1 ∑ ⌊ d n ⌋ μ ( k ) ∗ k 2 i = 1 ∑ ⌊ d k n ⌋ i j = 1 ∑ ⌊ d k m ⌋ j
发现⌊ n d ⌋ \lfloor\frac{n}{d}\rfloor ⌊ d n ⌋ 是可以数论分块的,在这个数论分块里面再套一个对于⌊ n k d ⌋ ⌊ m d k ⌋ \lfloor\frac{n}{kd}\rfloor\lfloor\frac{m}{dk}\rfloor ⌊ k d n ⌋ ⌊ d k m ⌋ 的数论分块就好了。 这样做的复杂度是O ( n ) O(n) O ( n ) 。 这题通过把后面的等差数列构造新函数可以优化至O ( s q r t ( n ) ) O(sqrt(n)) O ( s q r t ( n ) ) 啦。(待update)
luoguP3327
求∑ i = 1 n ∑ j = 1 m d ( i j ) \sum_{i=1}^n\sum_{j=1}^md(ij) ∑ i = 1 n ∑ j = 1 m d ( i j ) ,这里d ( i j ) d(ij) d ( i j ) 表示i j ij i j 的约数个数
首先:d ( i j ) = ∑ x ∣ i ∑ y ∣ j [ g c d ( x , y ) = = 1 ] d(ij)=\sum_{x|i}\sum_{y|j}[gcd(x,y)==1] d ( i j ) = ∑ x ∣ i ∑ y ∣ j [ g c d ( x , y ) = = 1 ]
证明就考虑i , j i,j i , j 的一个质因子p p p ,假设它在i i i 中的次数是e i e_i e i ,在j j j 中的次数是e j e_j e j 。那么它在i j ij i j 中的可能次数是e i + e j + 1 e_i+e_j+1 e i + e j + 1 。而右边我们保证了x , y x,y x , y 互质,意思就是p p p 不可在i , j i,j i , j 中同时存在。假设p p p 在i i i 中的次数为0 0 0 ,在j j j 中就有e j + 1 e_j+1 e j + 1 种选法。e j = 0 e_j=0 e j = 0 也同理。再减去重复的e i = e j = 0 e_i=e_j=0 e i = e j = 0 的情况,就是e i + e j + 1 e_i+e_j+1 e i + e j + 1 。
推导还挺妙的啊?
∑ i = 1 n ∑ j = 1 m d ( i j ) ( n < m ) \sum_{i=1}^n\sum_{j=1}^md(ij)(n<m) ∑ i = 1 n ∑ j = 1 m d ( i j ) ( n < m )
= ∑ i = 1 n ∑ j = 1 m ∑ x ∣ i ∑ y ∣ j [ g c d ( x , y ) = 1 ] =\sum_{i=1}^n\sum_{j=1}^m\sum_{x|i}\sum_{y|j}[gcd(x,y)=1] = ∑ i = 1 n ∑ j = 1 m ∑ x ∣ i ∑ y ∣ j [ g c d ( x , y ) = 1 ]
= ∑ x = 1 n ∑ y = 1 m [ g c d ( x , y ) = 1 ] ⌊ n x ⌋ ⌊ m y ⌋ =\sum_{x=1}^n\sum_{y=1}^m[gcd(x,y)=1]\lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{y}\rfloor = ∑ x = 1 n ∑ y = 1 m [ g c d ( x , y ) = 1 ] ⌊ x n ⌋ ⌊ y m ⌋
= ∑ x = 1 n ∑ y = 1 m ∑ d ∣ g c d ( x , y ) μ ( d ) ⌊ n x ⌋ ⌊ m y ⌋ ( n < m ) =\sum_{x=1}^n\sum_{y=1}^m\sum_{d|gcd(x,y)}\mu(d)\lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{y}\rfloor(n<m) = ∑ x = 1 n ∑ y = 1 m ∑ d ∣ g c d ( x , y ) μ ( d ) ⌊ x n ⌋ ⌊ y m ⌋ ( n < m )
= ∑ d = 1 n μ ( d ) ∑ x = 1 ⌊ n d ⌋ ∑ y = 1 ⌊ m d ⌋ ⌊ n d x ⌋ ⌊ m d y ⌋ =\sum_{d=1}^n\mu(d)\sum_{x=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{y=1}^{\lfloor\frac{m}{d}\rfloor}\lfloor\frac{n}{dx}\rfloor\lfloor\frac{m}{dy}\rfloor = ∑ d = 1 n μ ( d ) ∑ x = 1 ⌊ d n ⌋ ∑ y = 1 ⌊ d m ⌋ ⌊ d x n ⌋ ⌊ d y m ⌋
= ∑ d = 1 n μ ( d ) ∑ x = 1 ⌊ n d ⌋ ⌊ n d x ⌋ ∑ y = 1 ⌊ m d ⌋ ⌊ m d y ⌋ =\sum_{d=1}^n\mu(d)\sum_{x=1}^{\lfloor\frac{n}{d}\rfloor}\lfloor\frac{n}{dx}\rfloor\sum_{y=1}^{\lfloor\frac{m}{d}\rfloor}\lfloor\frac{m}{dy}\rfloor = ∑ d = 1 n μ ( d ) ∑ x = 1 ⌊ d n ⌋ ⌊ d x n ⌋ ∑ y = 1 ⌊ d m ⌋ ⌊ d y m ⌋
这个东西居然是可以数论分块的!一开始我惊了。我们用数论分块保证d d d 在[ L , R ] [L,R] [ L , R ] 区间上保持⌊ n d ⌋ \lfloor\frac{n}{d}\rfloor ⌊ d n ⌋ 和⌊ m d ⌋ \lfloor\frac{m}{d}\rfloor ⌊ d m ⌋ 一致。然后,我们惊讶地发现:∑ y = 1 ⌊ m d ⌋ ⌊ m d y ⌋ \sum_{y=1}^{\lfloor\frac{m}{d}\rfloor}\lfloor\frac{m}{dy}\rfloor ∑ y = 1 ⌊ d m ⌋ ⌊ d y m ⌋ 是什么?它就是一个数论分块的子问题!!!!就是[ 1 , ⌊ m d ⌋ ] [1,\lfloor\frac{m}{d}\rfloor] [ 1 , ⌊ d m ⌋ ] 这个前缀上的⌊ m i ⌋ \lfloor\frac{m}{i}\rfloor ⌊ i m ⌋ 的和!! 所以,我们O ( n ) O(n) O ( n ) 筛出μ \mu μ ,算出其前缀和。然后O ( n s q r t ( n ) ) O(nsqrt(n)) O ( n s q r t ( n ) ) 预处理出g [ i ] g[i] g [ i ] 表示[ 1 , i ] [1,i] [ 1 , i ] 这个前缀区间的子问题答案。我们再对外面的d d d 进行数论分块,可以O ( 1 ) O(1) O ( 1 ) 算出解。复杂度O ( ( n + T ) s q r t ( n ) ) O((n+T)sqrt(n)) O ( ( n + T ) s q r t ( n ) )
∑ i = 1 n ∑ j = 1 m d ( i j ) ( n < m ) \sum_{i=1}^n\sum_{j=1}^md(ij)(n<m) ∑ i = 1 n ∑ j = 1 m d ( i j ) ( n < m )
= ∑ i = 1 n ∑ j = 1 m ∑ x ∣ i ∑ y ∣ j [ g c d ( x , y ) = 1 ] =\sum_{i=1}^n\sum_{j=1}^m\sum_{x|i}\sum_{y|j}[gcd(x,y)=1] = ∑ i = 1 n ∑ j = 1 m ∑ x ∣ i ∑ y ∣ j [ g c d ( x , y ) = 1 ]
= ∑ x = 1 n ∑ y = 1 m [ g c d ( x , y ) = 1 ] ⌊ n x ⌋ ⌊ m y ⌋ =\sum_{x=1}^n\sum_{y=1}^m[gcd(x,y)=1]\lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{y}\rfloor = ∑ x = 1 n ∑ y = 1 m [ g c d ( x , y ) = 1 ] ⌊ x n ⌋ ⌊ y m ⌋
我们设f ( k ) = ∑ x = 1 n ∑ y = 1 m [ g c d ( x , y ) = k ] ⌊ n x ⌋ ⌊ m y ⌋ f(k)=\sum_{x=1}^n\sum_{y=1}^m[gcd(x,y)=k]\lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{y}\rfloor f ( k ) = ∑ x = 1 n ∑ y = 1 m [ g c d ( x , y ) = k ] ⌊ x n ⌋ ⌊ y m ⌋ ,所以答案就是f ( 1 ) f(1) f ( 1 ) 对吧。
又设F ( n ) = ∑ n ∣ d f ( d ) F(n)=\sum_{n|d}f(d) F ( n ) = ∑ n ∣ d f ( d ) ,根据莫反二f ( n ) = ∑ n ∣ d μ ( n d ) F ( d ) f(n)=\sum_{n|d}\mu(\frac{n}{d})F(d) f ( n ) = ∑ n ∣ d μ ( d n ) F ( d ) 。我们需要快速得出F ( n ) F(n) F ( n ) 。
F ( n ) F(n) F ( n )
= ∑ n ∣ d f ( d ) =\sum_{n|d}f(d) = ∑ n ∣ d f ( d )
= ∑ x = 1 n ∑ y = 1 m [ d ∣ g c d ( x , y ) ] ⌊ n x ⌋ ⌊ m y ⌋ =\sum_{x=1}^n\sum_{y=1}^m[d|gcd(x,y)]\lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{y}\rfloor = ∑ x = 1 n ∑ y = 1 m [ d ∣ g c d ( x , y ) ] ⌊ x n ⌋ ⌊ y m ⌋
= ∑ x = 1 ⌊ n d ⌋ ∑ y = 1 ⌊ m d ⌋ ⌊ n d x ⌋ ⌊ m d y ⌋ =\sum_{x=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{y=1}^{\lfloor\frac{m}
{d}\rfloor}\lfloor\frac{n}{dx}\rfloor\lfloor\frac{m}{dy}\rfloor = ∑ x = 1 ⌊ d n ⌋ ∑ y = 1 ⌊ d m ⌋ ⌊ d x n ⌋ ⌊ d y m ⌋
发现这玩意就是两个[ 1 , i ] [1,i] [ 1 , i ] 的数论分块入门题拼起来,可以O ( n s q r t ( n ) ) O(nsqrt(n)) O ( n s q r t ( n ) ) 预处理。
再看要求的答案式:f ( 1 ) = ∑ d = 1 n μ ( d ) F ( d ) f(1)=\sum_{d=1}^n\mu(d)F(d) f ( 1 ) = ∑ d = 1 n μ ( d ) F ( d ) ,展开F ( d ) F(d) F ( d ) 后发现可以数论分块。
(目前感觉初等变换和正经莫反区别不大。。。
luoguP3768
给定n , p n,p n , p ,求( ∑ i = 1 n ∑ j = 1 n i j g c d ( i , j ) ) ( m o d p ) (\sum_{i=1}^n\sum_{j=1}^nijgcd(i,j))(mod\ p) ( ∑ i = 1 n ∑ j = 1 n i j g c d ( i , j ) ) ( m o d p )
根据之前那个小结论,即求∑ i = 1 n ∑ j = 1 n i j ∑ d ∣ g c d ( i , j ) ϕ ( d ) ( m o d p ) \sum_{i=1}^n\sum_{j=1}^nij\sum_{d|gcd(i,j)}\phi(d)(mod\ p) ∑ i = 1 n ∑ j = 1 n i j ∑ d ∣ g c d ( i , j ) ϕ ( d ) ( m o d p )
= ∑ d = 1 n ϕ ( d ) ∑ i = 1 ⌊ n d ⌋ i d ∑ i = 1 ⌊ n d ⌋ j d =\sum_{d=1}^n\phi(d)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}id\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}jd = ∑ d = 1 n ϕ ( d ) ∑ i = 1 ⌊ d n ⌋ i d ∑ i = 1 ⌊ d n ⌋ j d
= ∑ d = 1 n ϕ ( d ) d 2 ∑ i = 1 ⌊ n d ⌋ i ∑ i = 1 ⌊ n d ⌋ j =\sum_{d=1}^n\phi(d)d^2\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}i\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}j = ∑ d = 1 n ϕ ( d ) d 2 ∑ i = 1 ⌊ d n ⌋ i ∑ i = 1 ⌊ d n ⌋ j
= ∑ d = 1 n ϕ ( d ) d 2 ( ∑ i = 1 ⌊ n d ⌋ i ) 2 =\sum_{d=1}^n\phi(d)d^2(\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}i)^2 = ∑ d = 1 n ϕ ( d ) d 2 ( ∑ i = 1 ⌊ d n ⌋ i ) 2
预处理ϕ ( d ) d 2 \phi(d)d^2 ϕ ( d ) d 2 的前缀和,数论分块乘个等差数列和的平方就好了。
O ( n + s q r t ( n ) ) O(n+sqrt(n)) O ( n + s q r t ( n ) ) ,线性筛搞出ϕ \phi ϕ 是瓶颈。
发现∑ i = 1 d ϕ ( d ) \sum_{i=1}^d\phi(d) ∑ i = 1 d ϕ ( d ) 是一个积性函数前缀和?杜教筛一下就好了嘛?
(等待学完杜教筛之后再想想吧,现在就咕咕咕
luoguP5221
这题有很多做法,我考场现场想了一个不用莫反不用欧拉函数的做法。就硬是从基本原理出发推导出来了。这里谈谈莫反做法。
要求∏ i = 1 n ∏ j = 1 n l c m ( i , j ) g c d ( i , j ) ( m o d P ) \prod_{i=1}^n\prod_{j=1}^n{\frac{lcm(i,j)}{gcd(i,j)}}(mod\ P) ∏ i = 1 n ∏ j = 1 n g c d ( i , j ) l c m ( i , j ) ( m o d P ) ,P P P 是个质数。
= ∏ i = 1 n ∏ j = 1 n i j g c d 2 ( i , j ) ( m o d P ) =\prod_{i=1}^n\prod_{j=1}^n{\frac{ij}{gcd^2(i,j)}}(mod\ P) = ∏ i = 1 n ∏ j = 1 n g c d 2 ( i , j ) i j ( m o d P )
= ( n ! ) 2 ( ∏ i = 1 n ∏ j = 1 n g c d ( i , j ) ) 2 =\frac{(n!)^2}{(\prod_{i=1}^n\prod_{j=1}^ngcd(i,j))^2} = ( ∏ i = 1 n ∏ j = 1 n g c d ( i , j ) ) 2 ( n ! ) 2
显然只需要关心∏ i = 1 n ∏ j = 1 n g c d ( i , j ) \prod_{i=1}^n\prod_{j=1}^ngcd(i,j) ∏ i = 1 n ∏ j = 1 n g c d ( i , j ) 就好了。
既然是莫反,我们就一定要确定出来一个g c d gcd g c d 的值,枚举这个值为d d d
= ∏ d = 1 n d ∑ i = 1 n ∑ j = 1 n [ g c d ( i , j ) = d ] =\prod_{d=1}^nd^{\sum_{i=1}^n\sum_{j=1}^n[gcd(i,j)=d]} = ∏ d = 1 n d ∑ i = 1 n ∑ j = 1 n [ g c d ( i , j ) = d ] 这里要对指数m o d ( p − 1 ) mod\ (p-1) m o d ( p − 1 ) 了,(希望不要求逆元啊否则就要CRT合并了QAQ)。
= ∏ d = 1 n d ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ⌊ n d ⌋ [ g c d ( i , j ) = 1 ] =\prod_{d=1}^nd^{\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{d}\rfloor}[gcd(i,j)=1]} = ∏ d = 1 n d ∑ i = 1 ⌊ d n ⌋ ∑ j = 1 ⌊ d n ⌋ [ g c d ( i , j ) = 1 ]
= ∏ d = 1 n d ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ⌊ n d ⌋ ∑ k ∣ g c d ( i , j ) μ ( k ) =\prod_{d=1}^nd^{\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{k|gcd(i,j)}\mu(k)} = ∏ d = 1 n d ∑ i = 1 ⌊ d n ⌋ ∑ j = 1 ⌊ d n ⌋ ∑ k ∣ g c d ( i , j ) μ ( k )
= ∏ d = 1 n d ∑ k = 1 ⌊ n d ⌋ μ ( k ) ( ⌊ n d k ⌋ ) 2 =\prod_{d=1}^nd^{\sum_{k=1}^{\lfloor\frac{n}{d}\rfloor}\mu(k)(\lfloor\frac{n}{dk}\rfloor)^2} = ∏ d = 1 n d ∑ k = 1 ⌊ d n ⌋ μ ( k ) ( ⌊ d k n ⌋ ) 2
现在,一种方案是枚举d d d ,然后对里面裸数论分块。可以发现指数里面的上界是⌊ n d ⌋ \lfloor\frac{n}{d}\rfloor ⌊ d n ⌋ ,显然可以对d d d 再分块一次。这样二次分块O ( n ) O(n) O ( n ) 。但是由于卡空间的缘故,不能再开一个阶乘数组。所以要维护两个指针移动地维护阶乘。
从数论分块到狄利克雷卷积
数论分块
对于计算∑ i = 1 n n i \sum_{i=1}^n{\frac{n}{i}} ∑ i = 1 n i n ,发现不同的n i \frac{n}{i} i n 最多只有Θ ( s q r t ( n ) ) \Theta(sqrt(n)) Θ ( s q r t ( n ) ) 个。
小证明:对于i < s q r t ( n ) i<sqrt(n) i < s q r t ( n ) ,不同的值最多只有Θ ( s q r t ( n ) ) \Theta(sqrt(n)) Θ ( s q r t ( n ) ) 个啦。对于i > = s q r t ( n ) i>=sqrt(n) i > = s q r t ( n ) ,除一下的范围就限定在了[ 1 , s q r t ( n ) ] [1,sqrt(n)] [ 1 , s q r t ( n ) ] 之间。得证。
结论:已 知 p , n ( p < = n ) 已知p,n(p<=n) 已 知 p , n ( p < = n ) ,那么使得⌊ n i ⌋ = ⌊ n p ⌋ \lfloor\frac{n}{i}\rfloor=\lfloor\frac{n}{p}\rfloor ⌊ i n ⌋ = ⌊ p n ⌋ 的最大的正整数i i i 是n ⌊ n p ⌋ \frac{n}{\lfloor\frac{n}{p}\rfloor} ⌊ p n ⌋ n
所以处理每一块的[ l , r ] [l,r] [ l , r ] 即可。
最普通的数论分块:
LL solve ( LL n) {
for ( LL L = 1 , R; L <= n; L = R + 1 ) {
R = n / ( n / L) ;
calculate ( ) ;
}
}
两个限制的数论分块:
LL solve ( LL n, LL m) {
LL upp = min ( n, m) ;
for ( LL L = 1 , R; L <= upp; L = R + 1 ) {
R = min ( n / ( n / l) , m / ( m / l) ) ;
calculate ( ) ;
}
}
可以分块套分块。
两个积性函数的狄利克雷卷积也是一个积性函数。
f , g f,g f , g 为积性函数的话:h ( n ) = ∑ d ∣ n f ( d ) ∗ g ( n d ) h(n)=\sum_{d|n}f(d)*g(\frac{n}{d}) h ( n ) = ∑ d ∣ n f ( d ) ∗ g ( d n ) 也是一个积性函数。
对于n i \frac{n}{i} i n 这样的形式,我们如果把它数论分块之后,就要求另外一个函数的前缀和。
常见的狄利克雷卷积结论:
σ 0 = 1 ∗ 1 \sigma_0=1*1 σ 0 = 1 ∗ 1
证明:直接按照狄利克雷卷积的定义展开就好了。1 ( n ) ∗ 1 ( n ) = ∑ d ∣ n 1 ( d ) ∗ 1 ( n d ) = ∑ d ∣ n 1 = σ 0 ( n ) 1(n)*1(n)=\sum_{d|n}1(d)*1(\frac{n}{d})=\sum_{d|n}1=\sigma_0(n) 1 ( n ) ∗ 1 ( n ) = ∑ d ∣ n 1 ( d ) ∗ 1 ( d n ) = ∑ d ∣ n 1 = σ 0 ( n )
σ 1 = I ∗ 1 \sigma_1=I*1 σ 1 = I ∗ 1
证明:化式子过程I ( n ) ∗ 1 ( n ) = ∑ d ∣ n I ( d ) ∗ 1 ( n d ) = ∑ d ∣ n d = σ 1 ( n ) I(n)*1(n)=\sum_{d|n}I(d)*1(\frac{n}{d})=\sum_{d|n}d=\sigma_1(n) I ( n ) ∗ 1 ( n ) = ∑ d ∣ n I ( d ) ∗ 1 ( d n ) = ∑ d ∣ n d = σ 1 ( n )
I = ϕ ∗ 1 I=\phi*1 I = ϕ ∗ 1
证明:化式子ϕ ( n ) ∗ 1 ( n ) = ∑ d ∣ n ϕ ( d ) ∗ 1 ( n d ) = ∑ d ∣ n ϕ ( d ) = n = I ( n ) \phi(n)*1(n)=\sum_{d|n}\phi(d)*1(\frac{n}{d})=\sum_{d|n}\phi(d)=n=I(n) ϕ ( n ) ∗ 1 ( n ) = ∑ d ∣ n ϕ ( d ) ∗ 1 ( d n ) = ∑ d ∣ n ϕ ( d ) = n = I ( n )
小结论:∑ d ∣ n ϕ ( d ) = n \sum_{d|n}\phi(d)=n ∑ d ∣ n ϕ ( d ) = n
证明(引):
任何一个≤T的正整数,都与T有一个最大公约数R,R也是T的因数,R×S=T。通常会有几个整数各自与T的最大公约数一致,那么相同的有多少呢?与T的最大公约数是R的整数,必然是R的倍数1~S倍。与S互质的数乘以R,符合这个条件;与S互约的数乘以R,不符合条件,因为最大公约数已经不是R。因此,与T最大公约数是R的整数的个数,就是与S互质的整数的个数,就是S的欧拉函数。
整数与T的最大公约数唯一,每个最大公约数的个数之和等于T(存在性与唯一性的统一)。因为每个最大公约数R的个数,等于T/R(即S)的欧拉函数;最大公约数S的个数,也等于R的欧拉函数。最大公约数就是T所有的因数,两个乘积为T的因数,作为最大公约数时的个数,就等于相乘因数的欧拉函数。1和T也不例外。这样,所有最大公约数的个数之和,等于所有因数的欧拉函数之和,等于T这个数本身。
(简单来说,就是建立了欧拉函数与最大公约数的一一对应关系,因为每个T的因数作为最大公约数的次数之和肯定等于T,而这个次数恰好是另一半的欧拉函数)。
ϵ = μ ∗ 1 \epsilon=\mu*1 ϵ = μ ∗ 1
证明:考虑右边,由于1 1 1 这个东西始终是1 1 1 ,所以右边卷起来就是n n n 的所有因子的μ \mu μ 和。根据前面的定理,自然等于ϵ ( n ) 。 \epsilon(n)。 ϵ ( n ) 。
f ∗ ϵ = f f*\epsilon=f f ∗ ϵ = f
证明:考虑左边,只有当d = n d=n d = n 的时候才会有ϵ ( n d ) = 1 \epsilon(\frac{n}{d})=1 ϵ ( d n ) = 1 ,只有这一项才会有贡献。
狄利克雷卷积有交换律,对加法的分配律,结合律
狄里克雷卷积的逆?构造