莫比乌斯反演个人小结 莫比乌斯反演个人小结
推荐
1.浅谈一类积性函数的前缀和(http://blog.****.net/skywalkert/article/details/50500009)
2.《贾志鹏线性筛》
3.《炫酷反演魔术》
这篇博客主要是学习了以上的东西的个人总结,如有错误请告知本人
假装大家现在没有看过上面那篇博客,先介绍一下
积性函数的定义
1.若f(n)的定义域为正整数域,值域为复数,即(f:{Z}^{+} ightarrow C),则称f(n)为数论函数。
2.若f(n)为数论函数,且f(1)=1,对于互质的正整数p,q有f(p⋅q)=f(p)⋅f(q),则称其为积性函数。
3.若f(n)为积性函数,且对于任意正整数p,q都有f(p⋅q)=f(p)⋅f(q),则称其为完全积性函数。
一些函数
1.下面的式子中(d|n)表示d是n的因子;([command])为if,command成立为 1,否则为0;((a,b))表示a,b的gcd;(lfloor frac{n}{i} floor)表示整除
2.除数函数({sigma} _ {k}(n)=sum _ {d|n}^{}{d}^{k}),表示n的约数的k次幂和
3.约数个数函数( au (n)={sigma } _ {0}(n)=sum_ {d|n}^{}1),表示n的约数个数,一般也写为d(n)。
4.约数和函数(sigma (n)={sigma } _ {1}(n)=sum_ {d|n}^{}d),表示n的约数之和。
5.欧拉函数(varphi (n)=sum_ {i=1}^{n}[(i,n)=1]cdot 1),表示不大于n且与n互质的正整数个数-欧拉函数是积性函数,不是完全积性函数
-如果将n质数分解,(n=prod_ {i=1}^{t}{{p} _ {i}}^{{k} _ {i}})
-(varphi (n)=ncdotprod_ {i=1}^{t}(1-frac{1}{{p} _ {i}}))
-根据以上得到(varphi(1)=1,varphi(p)=p-1,varphi({p}^{k})={p}^{k-1}cdot(p-1))
-(varphi(n))为偶数,当n>2时
-欧拉公式:({n}^{varphi(m)}=1quad(mod\,m)),当(n,m)=1时
-一个公式:({n}^{x}={n}^{x\%varphi(m)+varphi(m)}quad(mod\,m)),唯一条件是(xgeqvarphi(m))
6.莫比乌斯函数(mu(n)),在狄利克雷卷积的乘法中与恒等函数互为逆元,(mu(1)=1),对于无平方因子数(n=prod_ {i=1}^{t}{p} _ {i})有(mu(n)={(-1)}^{t}),对于有平方因子数n有(mu(n)=0)。
7.元函数(e(n)=[n=1]),狄利克雷卷积的乘法单位元,完全积性。
8.恒等函数(I(n)=1),完全积性。
9.单位函数(id(n)=n),完全积性。
10.幂函数({id}^{k}(n)=n^k),完全积性。
狄利克雷卷积(Dirichlet product)
数论函数f和g狄利克雷卷积定义为(( f ast g)(n)=sum_ {d|n}f(d)cdot g(frac {n} {d})),狄利克雷卷积满足交换律、结合律,对加法满足分配律
1.(fast e=f),(e)是单位元
2.(Iast mu=e)
3.(Iast varphi=id)
4.((idcdotvarphi)ast id=id^2)
5.如果f和g是积性,那么(fast g)是积性的。对于(f(n)=sum_ {d|n}g(d)),只要一者积性,两者都积性。但反演式不要求f或g积性
6.根据式2,(e)是卷积单位元,所以(I)和(mu)互为逆元
7.那么
(g=fast Iquad gast mu=f)
这就是莫比乌斯反演
给出一些反演式和代码
1.(f(n)=sum_ {d|n}g(d))
(quad g(n)=sum_ {d|n}mu(n/d)f(d)=sum_ {d|n}mu(d)f(n/d))
2.(f(n)=sum_ {n|d}g(d))
(quad g(n)=sum_ {n|d}mu(d/n)f(d))
3.(f(n)=sum_ {dgeq1}g(d))
(quad g(n)=sum_ {dgeq1}mu(d/n)f(d))
4.(f(n)=sum_ {k=0}^{n}C(n,k)g(k))
(quad g(n)=sum_ {k=0}^{n}(-1)^{n+k}C(n,k)f(k))
5.(f(n)=sum_ {k=n}^{infty}C(k,n)g(k))
(quad g(n)=sum_ {k=n}^{infty}(-1)^{n+k}C(k,n)f(k))
6.(f(n)=sum_ {k=0}^{n}C(n+p,k+p)g(k))
(quad g(n)=sum_ {k=n}^{infty}(-1)^{n+k}C(n+p,k+p)f(k))
7.(f(n)=sum_ {k=n}^{infty}C(n+p,k+p)g(k))
(quad g(n)=sum_ {k=n}^{infty}(-1)^{n+k}C(n+p,k+p)f(k))
8.(f(s)=sum_ {tsubseteq s}g(t))
(quad g(s)=sum_ {tsubseteq s}(-1)^{|s|-|t|}f(t))
9.(f(n)=sum_ {k=1}^{n}t(k)g(lfloor frac{n}{k} floor))
(quad g(n)=sum_ {k=1}^{n}mu(k)t(k)f(lfloor frac{n}{k} floor))推广莫比乌斯,条件:f,g数论函数,t完全积性,t(1)=1
******************************已知f[n]=(求和d|n)g(d),求g nlogn
for (int i = 1; i <= n; ++i)
for (int j = i + i; j <= n; j += i)
f[j] -= f[i];
*****************************f[n]=(求和d|n)g(d),已知g,求f
for (int i = n; i >= 1; --i)
for (int j = i + i; j <= n; j += i)
f[j] += f[i];
******************************已知f[n]=(求和n|d)g(d),求g nlogn
for (int i = n; i >= 1; --i)
for (int j = i + i; j <= n; j += i)
f[i] -= f[j];
*****************************f[n]=(求和n|d)g(d),已知g,求f
for (int i = 1; i <= n; ++i)
for (int j = i + i; j <= n; j += i)
f[i] += f[j];
**********************************
f[s]存原来的元素,之后f[s]存子集所有元素和
for (int i = 0; i < n; i++)
for (int s = 0; s < (1 << n); s++)
if (s >> i & 1)
f[s] += f[s ^ 1 << i];
***************************************
f[s]存子集所有元素和,之后f[s]存原来的元素
for (int i = 0; i < n; i++)
for (int s = 0; s < (1 << n); s++)
if (s >> i & 1)
f[s] -= f[s ^ 1 << i];
******************************************
数论卷积nlogn 算1-n的h[x]=(求和d|x)(f[d]*g[x/d]) 已知f,g的1-n
int f[MAXN],g[MAXN],h[MAXN]={0};
void calc(int n)
{
for (int i=1;i*i<=n;i++)
for (int j=i;i*j<=n;j++)
if(j==i)h[i*j]+=f[i]*g[i];
else h[i*j]+=f[i]*g[j]+f[j]*g[i];
}
一些有用的式子
1.(sum_ {i=1}^{n}{sigma} _ {k}(i)=sum_ {i=1}^{n}sum_ {d|i}d^k=sum_ {d=1}^{n}d^klfloorfrac{n}{d} floor)
2.(sum_ {d=1}^{n}dlfloorfrac{n}{d} floor=sum_ {d=1}^{n}frac{lfloorfrac{n}{d} floor(lfloorfrac{n}{d} floor+1)}{2})
3.([n=0]=sum_ {k=0}^{n}(-1)^k C(n,k))
4.([n=1]=sum_ {d|n}mu(d))
5.(n=sum_ {d|n}varphi(d))
6.([s=emptyset]=sum_ {tsubseteq s}(-1)^{|t|})
7.(varphi(n)=sum_ {d|n}mu(d)frac{n}{d})
8.(frac{varphi(n)}{n}=sum_ {d|n}frac{mu(d)}{d})此式中为分数
9.(varphi(n)=sum_ {i=1}^{n}[(n,i)=1])与n互质个数
10.(frac{nvarphi(n)+[n=1]}{2}=sum_ {i=1}^{n}icdot[(n,i)=1])与n互质和
11.(sum_ {d|m}varphi(d)n^{frac{m}{d}}=0quad(mod\,m))
一些技巧
1.我们有nlog子集求和的算法,那么我们如果想对父集求和的话怎么办呢?
先取反赋值,那么就是子集求和了
2.常用的分解方法
(n=prod_ {i=1}^{t}{{p} _ {i}}^{{k} _ {i}})
对于积性函数f存在
(g(n)=sum_ {d|n}f(d)=prod_ {i=1}^{t}(sum_ {j=0}^{ki}f(p _ i^j)))
如果f是完全积性函数的话还能进一步化简
一些科技
从上面那篇博客中得知了求积性函数求前缀和的方法,但构造那个特定的函数一般人是想不出来的。前几天突然看到了个式子:
设(h(n)=sum_ {i=1}^{n} f(i))
$sum_ {i=1}^{n}f(i)lfloor frac{n}{i}
floor=sum_ {i=1}^{n}h(lfloor frac{n}{i}
floor) (
)qquadqquadquad =h(n)+sum_ {i=2}^{n}h(lfloor frac{n}{i}
floor)$
根据上式就可以轻松求得欧拉函数(varphi)和莫比乌斯函数(mu)的前缀和
1.欧拉函数(varphi),求它的前缀和函数(Phi (n)=sum_{i=1}^{n}varphi(i))
代入得(Phi (n)=sum_ {i=1}^{n}varphi(i)lfloor frac{n}{i} floor-sum_ {i=2}^{n}Phi(lfloor frac{n}{i} floor))
而(sum_ {i=1}^{n}varphi(i)lfloor frac{n}{i} floor=sum_ {i=1}^{n}sum_ {d|i}varphi(d)=sum_ {i=1}^{n}i=frac{n(n+1)}{2})
所以(Phi (n)=frac{n(n+1)}{2}-sum_ {i=2}^{n}Phi(lfloor frac{n}{i} floor))
此式可以在预处理(n^{frac{2}{3}})个数的前提下,迭代达到(O(n^{frac{2}{3}}))的复杂度
2.同理,对于莫比乌斯函数(mu)的前缀和函数(M(n)=sum_{i=1}^{n}mu(i))
代入得(M(n)=sum_ {i=1}^{n}mu(i)lfloor frac{n}{i} floor-sum_ {i=2}^{n}M(lfloor frac{n}{i} floor))
而(sum_ {i=1}^{n}mu(i)lfloor frac{n}{i} floor=sum_ {i=1}^{n}sum_ {d|i}mu(d)=sum_ {i=1}^{n}[i=1]=1)
所以(M (n)=1-sum_ {i=2}^{n}M(lfloor frac{n}{i} floor))
此式可以在预处理(n^{frac{2}{3}})个数的前提下,迭代达到(O(n^{frac{2}{3}}))的复杂度
所以关键是化简(sum_ {i=1}^{n}f(i)lfloor frac{n}{i} floor)
另一个式子
(sum_ {i=1}^{n}sum_ {d|i}f(d)lfloor frac{i}{d}
floor=sum_ {i=1}^{n}icdot h(lfloor frac{n}{i}
floor))
例子
函数(f(n)=icdotvarphi(n)),求它的前缀和函数(h (n)=sum_{i=1}^{n}icdotvarphi(i))
代入得(h(n)=sum_ {i=1}^{n}sum_ {d|i}dcdotvarphi(d)lfloor frac{i}{d} floor-sum_ {i=2}^{n}icdot h(lfloor frac{n}{i} floor))
而(sum_ {i=1}^{n}sum_ {d|i}dcdotvarphi(d)lfloor frac{i}{d} floor=sum_ {i=1}^{n}icdotsum_ {d|i}varphi(d)=sum_ {i=1}^{n}i^2=frac{n(n+1)(2n+1)}{6})
所以(h (n)=frac{n(n+1)(2n+1)}{6}-sum_ {i=2}^{n}icdot h(lfloor frac{n}{i} floor))
此式可以在预处理(n^{frac{2}{3}})个数的前提下,迭代达到(O(n^{frac{2}{3}}))的复杂度