问题:洛谷P1403 [AHOI2005]约数研究
题目大意:设 f ( x ) f(x) f(x)为 x x x的约数个数,求 ∑ i = 1 n f ( i ) \sum_{i=1}^{n}f(i) ∑i=1nf(i)
题解:从1~ n n n中,含有约数 i i i的数的个数为 ⌊ n i ⌋ ⌊\frac{n}{i}⌋ ⌊in⌋,因此 a n s = ∑ i = 1 n ⌊ n i ⌋ ans=\sum_{i=1}^{n}⌊\frac{n}{i}⌋ ans=i=1∑n⌊in⌋
但我们发现有许多 ⌊ n i ⌋ ⌊\frac{n}{i}⌋ ⌊in⌋是重复的。设 j = n ⌊ n i ⌋ j=\frac{n}{⌊\frac{n}{i}⌋} j=⌊in⌋n,即有 j j j个数 t t t使得 ⌊ n i ⌋ ≤ ⌊ n j ⌋ ⌊\frac{n}{i}⌋\leq⌊\frac{n}{j}⌋ ⌊in⌋≤⌊jn⌋,因此对于每个 ⌊ n i ⌋ ⌊\frac{n}{i}⌋ ⌊in⌋有 ( j − i + 1 ) (j-i+1) (j−i+1)个重复项。
for(int i=1,j;i<=n;i=j+1)
{
j=n/(n/i);
ans+=(n/i)*(j-i+1);
}
定义:1~ x x x中与 x x x互质数的数量。
公式(后面证): ϕ ( x ) = n ∏ i = 1 k ( 1 − p i ) , p i ∈ p r i m e , p i ∣ x . \phi(x)=n\prod_{i=1}^{k}(1-p_i),p_i\in{prime},p_i|x. ϕ(x)=n∏i=1k(1−pi),pi∈prime,pi∣x.
性质(后面证): ∑ d ∣ n ϕ ( d ) = n . \sum_{d|n}\phi(d)=n. ∑d∣nϕ(d)=n.
线性筛法:
int phi[maxn],prime[maxn],num[maxn];
int prime_num;
void cal()
{
phi[1]=1;
for(int i=2;i<=n;i++)
{
if(!num[i])
{
//质数只与自身不互质
prime[++prime_num]=i;
phi[i]=i-1;
}
for(int j=1;j<=prime_num&&i*prime[j]<=n;j++)
{
num[prime[j]*i]=1;
//含有此质数因子,只改变n的值
if(i%prime[j]==0)
{
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
//二者互质,利用积性函数的性质
phi[i*prime[j]]=phi[i]*phi[prime[j]];
}
}
}
μ ( x ) = { 1 x=1 ( − 1 ) k x= p 1 p 2 . . . p k 0 其余情况 \mu(x)= \begin{cases} 1& \text{x=1}\\ (-1)^k & \text{x=$p_1p_2...p_k$}\\ 0 & \text{其余情况} \end{cases} μ(x)=⎩⎪⎨⎪⎧1(−1)k0x=1x=p1p2...pk其余情况
int prime[maxn],num[maxn],mu[maxn],p_num;
void get_mu()
{
mu[1]=1;
for(int i=2;i<maxn;i++)
{
if(!num[i])
{
//质数的莫比乌斯函数都是-1
prime[++p_num]=i;
mu[i]=-1;
}
for(int j=1;j<=p_num&&i*prime[j]<maxn;j++)
{
num[i*prime[j]]=1;
//i中不含有约数prime[j],质约数个数+1
if(i%prime[j]) mu[i*prime[j]]=-mu[i];
//出现平方因子即为0
else
{
mu[i*prime[j]]=0;
break;
}
}
}
}
ϕ ( x ) = ∑ i = 1 x [ g c d ( i , x ) = 1 ] \phi(x)=\sum_{i=1}^{x}[gcd(i,x)=1] ϕ(x)=i=1∑x[gcd(i,x)=1]
考虑容斥原理。在 x x x个数中,要先扣除所有质因数及其倍数。然后我们发现那些两个质因数乘积的倍数被重复扣除,因此要把它们再加回来。紧接着又发现三个质因数乘积的数等于没扣除,又要再次扣除…最后我们发现每个数的容斥系数就是它的莫比乌斯函数!即:
ϕ ( x ) = ∑ d ∣ x μ ( d ) ⌊ x d ⌋ \phi(x)=\sum_{d|x}\mu(d)⌊\frac{x}{d}⌋ ϕ(x)=d∣x∑μ(d)⌊dx⌋
= n − ∑ n p i + ∑ n p i p j − . . . + ( − 1 ) k ∑ n p 1 p 2 . . . p k =n-\sum\frac{n}{p_i}+\sum\frac{n}{p_ip_j}-...+(-1)^k\sum\frac{n}{p_1p_2...p_k} =n−∑pin+∑pipjn−...+(−1)k∑p1p2...pkn
= n ( 1 − 1 p 1 ) ( 1 − 1 p 2 ) . . . ( 1 − 1 p k ) =n(1-\frac{1}{p_1})(1-\frac{1}{p_2})...(1-\frac{1}{p_k}) =n(1−p11)(1−p21)...(1−pk1)
= n ∏ i = 1 k ( 1 − 1 p i ) =n\prod_{i=1}^{k}(1-\frac{1}{p_i}) =ni=1∏k(1−pi1)
XMU区预赛选拔 D.塔子哥数数
数论中的很多计数问题,当以1为最小元时,容斥系数通常为 ( − 1 ) k (-1)^k (−1)k;以质数为最小元时,容斥系数通常为莫比乌斯函数。我们就可以通过线性筛莫比乌斯函数来进行容斥简化计算。
其中形式一为基本形式,但形式二更为常用。
形式一:
已知: F ( n ) = ∑ d ∣ n f ( d ) F(n)=\sum_{d|n}f(d) F(n)=∑d∣nf(d),则:
∑ d ∣ n μ ( d ) F ( n d ) \sum_{d|n}\mu(d)F(\frac{n}{d}) d∣n∑μ(d)F(dn)
= ∑ d ∣ n μ ( d ) ∑ i ∣ n d f ( i ) =\sum_{d|n}\mu(d)\sum_{i|\frac{n}{d}}f(i) =d∣n∑μ(d)i∣dn∑f(i)
= ∑ d ∣ n ∑ i ∣ n d μ ( d ) f ( i ) =\sum_{d|n}\sum_{i|\frac{n}{d}}\mu(d)f(i) =d∣n∑i∣dn∑μ(d)f(i)
= ∑ i d ∣ n μ ( d ) f ( i ) =\sum_{id|n}\mu(d)f(i) =id∣n∑μ(d)f(i)
= ∑ i ∣ n ∑ d ∣ n i μ ( d ) f ( i ) =\sum_{i|n}\sum_{d|\frac{n}{i}}\mu(d)f(i) =i∣n∑d∣in∑μ(d)f(i)
= ∑ i ∣ n f ( i ) ∑ d ∣ n i μ ( d ) =\sum_{i|n}f(i)\sum_{d|\frac{n}{i}}\mu(d) =i∣n∑f(i)d∣in∑μ(d)
由莫比乌斯函数定义,
∑ d ∣ n i μ ( d ) = { 1 i=n 0 i<n \sum_{d|\frac{n}{i}}\mu(d)= \begin{cases} 1& \text{i=n}\\ 0 & \text{i<n} \end{cases} d∣in∑μ(d)={10i=ni
因此
形式二:
已知: F ( n ) = ∑ n ∣ d f ( d ) F(n)=\sum_{n|d}f(d) F(n)=∑n∣df(d),则:
∑ n ∣ d μ ( d n ) F ( d ) \sum_{n|d}\mu(\frac{d}{n})F(d) n∣d∑μ(nd)F(d)
= ∑ n ∣ d μ ( d n ) ∑ d ∣ i f ( i ) =\sum_{n|d}\mu(\frac{d}{n})\sum_{d|i}f(i) =n∣d∑μ(nd)d∣i∑f(i)
= ∑ n ∣ i f ( i ) ∑ n ∣ d , d ∣ i μ ( d n ) =\sum_{n|i}f(i)\sum_{n|d,d|i}\mu(\frac{d}{n}) =n∣i∑f(i)n∣d,d∣i∑μ(nd)
设 k = d n k=\frac{d}{n} k=nd。枚举 k k k:
= ∑ n ∣ i f ( i ) ∑ k ∣ i n μ ( k ) =\sum_{n|i}f(i)\sum_{k|\frac{i}{n}}\mu(k) =n∣i∑f(i)k∣ni∑μ(k)
由莫比乌斯函数定义,
我们由容斥定理得到了 ϕ ( x ) = ∑ d ∣ x μ ( d ) ⌊ x d ⌋ \phi(x)=\sum_{d|x}\mu(d)⌊\frac{x}{d}⌋ ϕ(x)=∑d∣xμ(d)⌊dx⌋。设 F ( x ) = x F(x)=x F(x)=x。由莫比乌斯反演的逆过程,有:
F ( x ) = ∑ d ∣ x ϕ ( x ) = x . F(x)=\sum_{d|x}\phi(x)=x. F(x)=d∣x∑ϕ(x)=x.
1、洛谷P3455 [POI2007]ZAP-Queries