整理自该博客
定义如下:
性质
n ≠ 1 n\neq 1 n=1时相当于 ( 1 − 1 ) n (1-1)^n (1−1)n的二项展开
对于正整数n
∑ d ∣ n μ ( d ) d = φ ( n ) n \sum_{d|n}{\frac{\mu(d)}{d}}=\frac{\varphi(n)}{n} ∑d∣ndμ(d)=nφ(n)(与欧拉函数联系起来)
μ ( d ) \mu(d) μ(d)也为积性函数
分情况讨论
int p[M];质数表
int cnt=0;
int f[M];//欧拉函数
bool flag[M];
void sieve()
{
int i,j;
f[1]=1;
for(i=2;i<=n;i++)
{
if(!flag[i])
{
p[++cnt]=i;
f[i]=i-1;
}
for(j=1;i*p[j]<=n;j++)
{
flag[i*p[j]]=true;
if(i%p[j]==0)
{
f[i*p[j]]=p[j]*f[i];
break;
}
f[i*p[j]]=f[i]*f[p[j]];
}
}
}
分情况讨论
int p[M];//质数表
int cnt=0;
int f[M];//莫比乌斯函数
bool flag[M];
void sieve()
{
int i,j;
f[1]=1;
for(i=2;i<=n;i++)
{
if(!flag[i])
{
p[++cnt]=i;
f[i]=-1;
}
for(j=1;i*p[j]<=n;j++)
{
flag[i*p[j]]=true;
if(i%p[j]==0)
{
f[i*p[j]]=0;
break;
}
f[i*p[j]]=-f[i];
}
}
}
注意还要保存最小质数的幂次
int p[M];质数表
int cnt=0;
int num[M];//最小质数的幂次
int f[M];
bool flag[M];
void sieve()
{
int i,j;
f[1]=1;
num[1]=0;
for(i=2;i<=n;i++)
{
if(!flag[i])
{
num[i]=1;
p[++cnt]=i;
f[i]=-1;
}
for(j=1;i*p[j]<=n;j++)
{
flag[i*p[j]]=true;
if(i%p[j]==0)
{
f[i*p[j]]=f[i]/(num[i]+1)*(num[i]+2);
num[i*p[j]]=num[i]+1;
break;
}
f[i*p[j]]=f[i*p[j]]*2;
nunm[i*p[j]]=1;
}
}
}
但求 1 − n 1-n 1−n的约数和不需要筛
例(只需要对 n i \frac{n}{i} in 求和)
其他积性函数类似
( f ∗ g ) ( n ) = ∑ d ∣ n f ( d ) g ( n d ) (f*g)(n)=\sum_{d|n}{f(d)g(\frac{n}{d})} (f∗g)(n)=∑d∣nf(d)g(dn)
性质:
交换律
f ∗ g = g ∗ f f*g=g*f f∗g=g∗f
结合律
( f ∗ g ) ∗ h = f ∗ ( g ∗ h ) (f*g)*h=f*(g*h) (f∗g)∗h=f∗(g∗h)
分配律
( f + g ) ∗ h = f ∗ h + g ∗ h (f+g)*h=f*h+g*h (f+g)∗h=f∗h+g∗h
补充知识:
元函数 ϵ ( n ) = ( n = = 1 ) \epsilon(n)=(n==1) ϵ(n)=(n==1) 当且仅当 n = = 1 n==1 n==1时 ϵ ( n ) = 1 \epsilon(n)=1 ϵ(n)=1
恒等函数 I ( n ) = 1 I(n)=1 I(n)=1
单位函数 i d ( n ) = n id(n)=n id(n)=n
性质:
f ∗ ϵ = f f*\epsilon=f f∗ϵ=f
积性函数*积性函数=积性函数 证明
μ ∗ I = I ∗ μ = ϵ \mu*I=I*\mu=\epsilon μ∗I=I∗μ=ϵ
( ∑ d ∣ n μ ( d ) = ( n = = 1 ) \sum_{d|n}{\mu(d)}=(n==1) ∑d∣nμ(d)=(n==1))
非常重要
(相当于二项展开)
φ ∗ I = i d \varphi*I=id φ∗I=id
( ∑ d ∣ n φ ( d ) = n \sum_{d|n}{\varphi(d)}=n ∑d∣nφ(d)=n)
φ ∗ I = i d \varphi*I=id φ∗I=id
i d ∗ μ = φ ∗ I ∗ μ = φ ∗ ( I ∗ μ ) = φ ∗ ϵ = φ id*\mu=\varphi*I*\mu=\varphi*(I*\mu)=\varphi*\epsilon=\varphi id∗μ=φ∗I∗μ=φ∗(I∗μ)=φ∗ϵ=φ
φ ( n ) = ∑ d ∣ n μ ( d ) i d ( n d ) = ∑ d ∣ n n d μ ( d ) \varphi(n)=\sum_{d|n}{\mu(d)id(\frac{n}{d})}=\sum_{d|n}{\frac{n}{d}\mu(d)} φ(n)=∑d∣nμ(d)id(dn)=∑d∣ndnμ(d)
φ ( n ) n = ∑ d ∣ n μ ( d ) d \frac{\varphi(n)}{n}=\sum_{d|n}{\frac{\mu(d)}{d}} nφ(n)=∑d∣ndμ(d)
设 F ( n ) 和 f ( n ) F(n)和f(n) F(n)和f(n)均为定义在自然数上的函数,且满足
F ( n ) = ∑ d ∣ n f ( d ) F(n)=\sum_{d|n}{f(d)} F(n)=∑d∣nf(d)
则
f ( n ) = ∑ d ∣ n μ ( d ) F ( ⌊ n d ⌋ ) f(n)=\sum_{d|n}{\mu(d)F(\lfloor\frac{n}{d}\rfloor)} f(n)=∑d∣nμ(d)F(⌊dn⌋)
或者是:
f ( n ) = ∑ d ∣ n μ ( n d ) F ( d ) f(n)=\sum_{d|n}{\mu(\frac{n}{d})F(d)} f(n)=∑d∣nμ(dn)F(d)
这个定理就是莫比乌斯反演定理
证明:
F = f ∗ I F=f*I F=f∗I
F ∗ μ = f ∗ I ∗ μ = f ∗ ( I ∗ μ ) = f ∗ ϵ = f F*\mu=f*I*\mu=f*(I*\mu)=f*\epsilon=f F∗μ=f∗I∗μ=f∗(I∗μ)=f∗ϵ=f
另外一种形式:
更常用,因为找倍数比找因子要容易得多。
若:
F ( n ) = ∑ n ∣ d f ( d ) F(n)=\sum_{n|d}{f(d)} F(n)=∑n∣df(d)
则
f ( n ) = ∑ n ∣ d μ ( d n ) F ( d ) = ∑ k ∈ N + μ ( k ) F ( k n ) f(n)=\sum_{n|d}{\mu(\frac{d}{n})F(d)}=\sum_{k\in N_+}{\mu(k)F(kn)} f(n)=n∣d∑μ(nd)F(d)=k∈N+∑μ(k)F(kn)
**注:**可以用容斥原理去理解。
求解 ∑ i = 1 n ⌊ n i ⌋ \sum_{i=1}^{n}{\lfloor\frac{n}{i}\rfloor} ∑i=1n⌊in⌋
其实可以发现有许多 ⌊ n i ⌋ \lfloor\frac{n}{i}\rfloor ⌊in⌋都是一样的,因此可以把值相等的合成一个块,而且每一块最大值为 n ( n i ) \frac{n}{(\frac{n}{i})} (in)n
即 n / ( n / i ) n/(n/i) n/(n/i),换句话说一个块有个数为 l l l ,这个块的 ⌊ n i ⌋ \lfloor\frac{n}{i}\rfloor ⌊in⌋ 相等, 这个块最大的数就是 n ( n l ) \frac{n}{(\frac{n}{l})} (ln)n
不特别严谨证明
n / i n/i n/i 算出来一样,即 n = k × i + r n=k\times i+r n=k×i+r中 k k k一样
对于k一样的最大的 i i i,可得 r < k r
r<k ,否则 r ′ = r − k r^{'}=r-k r′=r−k使得 i + 1 i+1 i+1 也满足一样的 k k kn k = i + r k = i \frac{n}{k}=i+\frac{r}{k}=i kn=i+kr=i
i m a x = n k = n n / i i_{max}=\frac{n}{k}=\frac{n}{n/i} imax=kn=n/in
for(l=1,r;l<=n;l=r+1)
{
r=n/(n/l);
ans+=(r-l+1)*(n/l);
}//与每个l相同的值最大的为n/(n/l)
杜教筛就是为了计算 ∑ i = 1 n f ( i ) \sum_{i=1}^{n}{f(i)} ∑i=1nf(i) ( f ( i ) f(i) f(i)为积性函数)
记 S ( n ) = ∑ i = 1 n f ( i ) S(n)=\sum_{i=1}^{n}{f(i)} S(n)=∑i=1nf(i)
为了出现 S ( n ) S(n) S(n),我们希望对 f f f求和
因此选取另一积性函数 g g g,并设 h = f ∗ g h=f*g h=f∗g(注意 h h h也为积性函数)
再计算 ∑ i = 1 n h ( i ) \sum_{i=1}^{n}{h(i)} ∑i=1nh(i)
∑ i = 1 n h ( i ) = ∑ i = 1 n ∑ d ∣ i g ( d ) × f ( i d ) \sum_{i=1}^{n}{h(i)}=\sum_{i=1}^{n}\sum_{d|i}{g(d)\times f(\frac{i}{d})} ∑i=1nh(i)=∑i=1n∑d∣ig(d)×f(di)
= ∑ d = 1 n g ( d ) ∑ i = 1 ⌊ n d ⌋ f ( i ) =\sum_{d=1}^{n}{g(d)}\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}{f(i)} =∑d=1ng(d)∑i=1⌊dn⌋f(i)
= ∑ d = 1 n g ( d ) × S ( ⌊ n d ⌋ ) =\sum_{d=1}^{n}{g(d)}\times S(\lfloor\frac{n}{d}\rfloor) =∑d=1ng(d)×S(⌊dn⌋)
为了出现 S ( n ) S(n) S(n),提出第一项
∑ i = 1 n h ( i ) = g ( 1 ) × S ( n ) + ∑ d = 2 n g ( d ) × S ( ⌊ n d ⌋ ) \sum_{i=1}^{n}{h(i)}=g(1)\times S(n)+\sum_{d=2}^{n}{g(d)}\times S(\lfloor\frac{n}{d}\rfloor) ∑i=1nh(i)=g(1)×S(n)+∑d=2ng(d)×S(⌊dn⌋)
g ( 1 ) × S ( n ) = ∑ i = 1 n h ( i ) − ∑ d = 2 n g ( d ) × S ( ⌊ n d ⌋ ) g(1)\times S(n)=\sum_{i=1}^{n}{h(i)}-\sum_{d=2}^{n}{g(d)}\times S(\lfloor\frac{n}{d}\rfloor) g(1)×S(n)=∑i=1nh(i)−∑d=2ng(d)×S(⌊dn⌋)
通过构造 g g g,可得到 S ( n ) S(n) S(n)
S ( n ) = ∑ i = 1 n μ ( i ) S(n)=\sum_{i=1}^{n}{\mu(i)} S(n)=∑i=1nμ(i)
通过式子 μ ∗ I = ϵ \mu*I=\epsilon μ∗I=ϵ,可构造 g g g为 I I I(显然为积性函数), h h h为 ϵ \epsilon ϵ
因此得到式子
$ S(n)=1-\sum_{d=2}^{n} S(\lfloor\frac{n}{d}\rfloor)$
S ( n ) = ∑ i = 1 n φ ( i ) S(n)=\sum_{i=1}^{n}{\varphi(i)} S(n)=∑i=1nφ(i)
通过式子 φ ∗ I = i d \varphi*I=id φ∗I=id,可构造 g g g为 I I I(显然为积性函数), h h h为 i d id id
因此得到式子
$ S(n)=\sum_{i=1}{n}{i}-\sum_{d=2}{n} S(\lfloor\frac{n}{d}\rfloor)$
∑ d = 2 n S ( ⌊ n d ⌋ ) \sum_{d=2}^{n} S(\lfloor\frac{n}{d}\rfloor) ∑d=2nS(⌊dn⌋)要用到整除分块
S ( n ) = ∑ i = 1 n i × φ ( i ) S(n)=\sum_{i=1}^{n}{i\times \varphi(i)} S(n)=∑i=1ni×φ(i)
这个例子不太容易看出来,核心就是消去 i i i,
可构造 g g g为 i d id id(会出现 n i \frac{n}{i} in,刚好可以消去),
h = ∑ i ∣ n i × φ ( i ) × i d ( n i ) = ∑ i ∣ n i × φ ( i ) × n i = ∑ i ∣ n n × φ ( i ) = n × ∑ i ∣ n φ ( i ) = n 2 h=\sum_{i|n}{i\times \varphi(i)\times id(\frac{n}{i})}=\sum_{i|n}{i\times \varphi(i)\times \frac{n}{i}}=\sum_{i|n}{n\times \varphi(i)}=n\times \sum_{i|n}{\varphi(i)}=n^2 h=∑i∣ni×φ(i)×id(in)=∑i∣ni×φ(i)×in=∑i∣nn×φ(i)=n×∑i∣nφ(i)=n2
因此得到式子
$ S(n)=\sum_{i=1}{n}{i2}-\sum_{d=2}^{n}d\times S(\lfloor\frac{n}{d}\rfloor)$
∑ d = 2 n d × S ( ⌊ n d ⌋ ) \sum_{d=2}^{n}d\times S(\lfloor\frac{n}{d}\rfloor) ∑d=2nd×S(⌊dn⌋)依然可以乘除分块
模板题