您的位置:首页 > 其它

莫比乌斯相关

2016-03-08 11:57 127 查看
以下pp均代表素数

莫比乌斯函数

μ(n)=⎧⎩⎨1(−1)k0n=1n=p1p2...pkn含有完全平方因子\mu(n)=\begin{cases}1&\text{n=1}\\(-1)^k&\text{$n=p_1p_2...p_k$}\\0 &\text{$n$含有完全平方因子}\end{cases}

∑d|nμ(d)={10(n=1)(n>1)\sum_{d|n}\mu(d)=\begin{cases}1&(n=1)\\0&(n>1)\end{cases}

n可以写成n=pa11pa22...pakk,只有当d中不含平方因子时才对答案有贡献,即n可以写成n=p_1^{a_1}p_2^{a_2}...p_k^{a_k},只有当d中不含平方因子时才对答案有贡献,即

∑d|n====C1k−C2k+...+(−1)kCkk∑i=1k(−1)iCik∑i=1k(−1)i(1)k−iCik0\begin{eqnarray*} \sum_{d|n}&=&C_k^1-C_k^2+...+(-1)^kC_k^k\\&=&\sum_{i=1}^k(-1)^iC_k^i\\&=&\sum_{i=1}^k(-1)^i(1)^{k-i}C_k^i\\&=&0\end{eqnarray*}

μ(i)是积性函数\mu(i)是积性函数

积性函数:若对任意gcd(a,b)=1有f(a⋅b)=f(a)⋅f(b)则称函数f(i)为积性函数积性函数:若对任意gcd(a,b)=1有f(a\cdot b)=f(a)\cdot f(b)则称函数f(i)为积性函数

若对任意a,b有f(a⋅b)=f(a)⋅f(b)则称函数f(i)为完全积性函数\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 若对任意a,b有f(a\cdot b)=f(a)\cdot f(b)则称函数f(i)为完全积性函数

积性函数的性质

1.f(1)=1f(1)=1

2.积性函数的前缀和仍是积性函数积性函数的前缀和仍是积性函数

线性筛求μ\mu

const
maxn=100000;
var
check:array[0..maxn]of boolean;
mu,prime:array[0..maxn]of longint;
i,j,k:longint;
n,len:longint;
begin
readln(n); len:=0; mu[1]:=1;
for i:=2 to n do
begin
if (check[i]=false)
then begin inc(len); prime[len]:=i; mu[i]:=-1; end;
for j:=1 to len do
begin
if (i*prime[j]>n) then break;
check[i*prime[j]]:=true;
if (i mod prime[j]=0)
then begin mu[i*prime[j]]:=0; break; end;
mu[i*prime[j]]:=-mu[i];
end;
end;
for i:=1 to n do
writeln(i,' ',mu[i]);
end.


莫比乌斯反演

两个形式

1.F[n]=∑d|nf[d]⇒f[n]=∑d|nμ(d)F[nd]F
=\sum_{d|n}f[d]\Rightarrow f
=\sum_{d|n}\mu(d)F[\frac{n}{d}]

证明:

f[n]====∑d|nμ(d)⋅F[nd]∑d|nμ(d)⋅∑k|ndf[k]∑k|nf[k]⋅∑d|nkμ(d)f[n]\begin{eqnarray*}f
&=&\sum_{d|n}\mu(d)\cdot F[\frac{n}{d}]\\&=&\sum_{d|n}\mu(d)\cdot \sum_{k|\frac{n}{d}}f[k]\\&=&\sum_{k|n}f[k]\cdot \sum_{d|\frac{n}{k}}\mu(d)\\&=&f
\end{eqnarray*}

最后一步是将∑d|nμ(d)代入\sum_{d|n}\mu(d)代入

2.F[n]=∑n|df[d]⇒f[n]=∑n|dμ(dn)F[d]F
=\sum_{n|d}f[d]\Rightarrow f
=\sum_{n|d}\mu(\frac{d}{n})F[d]

证明略,大部分用的是这种形式

[BZOJ2301] [HAOI2011]Problem b/[BZOJ1101] [POI2007]Zap

题目大意

∑i=ab∑j=cd[gcd(i,j)==k]\sum_{i=a}^b\sum_{j=c}^d[gcd(i,j)==k]

题解



f(a,b,k)=∑i=1a∑j=1b[gcd(i,j)==k]f(a,b,k)=\sum_{i=1}^a\sum_{j=1}^b[gcd(i,j)==k]

简单容斥一下

ans=f(b,d,k)−f(a−1,d,k)−f(b,c−1,k)+f(a−1,c−1,k)ans=f(b,d,k)-f(a-1,d,k)-f(b,c-1,k)+f(a-1,c-1,k)

那么就要求

f(a,b,k)=f(a/k,b/k,1)=∑i=1a/k∑j=1b/k[gcd(i,j)==1]f(a,b,k)=f(a/k,b/k,1)=\sum_{i=1}^{a/k}\sum_{j=1}^{b/k}[gcd(i,j)==1]

继续化简,带入∑d|nμ(d)=[n==1]\sum_{d|n}\mu(d)=[n==1]

∑i=1a/k∑j=1b/k[gcd(i,j)==1]=∑i=1a/k∑j=1b/k∑d|gcd(i,j)μ(d)=∑1<=d<=min(a/k,b/k)μ(d)∑1<=i<=a/k且d|i∑1<=j<=b/k且d|j\sum_{i=1}^{a/k}\sum_{j=1}^{b/k}[gcd(i,j)==1]=\sum_{i=1}^{a/k}\sum_{j=1}^{b/k}\sum_{d|gcd(i,j)}\mu(d)=\sum_{1<=d<=\min(a/k,b/k)}\mu(d)\sum_{1<=i<=a/k且d|i}\sum_{1<=j<=b/k且d|j}

得到

∑1<=d<=min{a/k,b/k}μ(d)⌊a/kd⌋⌊b/kd⌋\sum_{1<=d<=min\{a/k,b/k\}} \mu (d) \lfloor \frac{a/k}{d} \rfloor\lfloor \frac{b/k}{d} \rfloor

此时原问题的复杂度被降到O(q⋅min{a/k,b/k})级别O(q\cdot min\{a/k,b/k\})级别但仍无法A掉

但是我们会发现⌊a/kd⌋只有2a/k−−−√个值\lfloor \frac{a/k}{d}\rfloor只有2\sqrt{a/k}个值,也就是说⌊a/kd⌋⌊b/kd⌋\lfloor \frac{a/k}{d} \rfloor\lfloor \frac{b/k}{d} \rfloor最多也就是2(a/k−−−√+b/k−−−√)2(\sqrt{a/k}+\sqrt{b/k})(确实是)个值,而μ(i)\mu(i)是可以预处理出前缀和的,所有枚举⌊a/kd⌋⌊b/kd⌋\lfloor \frac{a/k}{d} \rfloor\lfloor \frac{b/k}{d} \rfloor即可

附上枚举的代码(想想为什么)

ans:=0; i:=1;
while (i<=min(n,m)) do
begin
last:=min(n div (n div i),m div (m div i));
ans:=ans+(sum[last]-sum[i-1])*(n div i)*(m div i);
i:=last+1;
end;


CODE

[BZOJ2820] YY的GCD

题目大意

∑i=1n∑j=1m[gcd(i,j)==prime]\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)==prime]

题解

根据上一题的结论,我们枚举每一个素数pp,那么

ans=∑p∈[1,min(n,m)]∑d=1min(n/p,m/p)μ(d)⌊npd⌋⌊mpd⌋ans=\sum_{p\in [1,min(n,m)]}\sum_{d=1}^{\min(n/p,m/p)}\mu(d)\lfloor \frac{n}{pd}\rfloor \lfloor \frac{m}{pd}\rfloor

现在的复杂度为O(q⋅∑pn/p−−−√)O(q\cdot \sum_p\sqrt{n/p})仍需减小

所以我们设T=pdT=pd带入上式中得到

∑T=1min(n,m)⌊nT⌋⌊mT⌋∑p|Tμ(Tp)\sum_{T=1}^{\min(n,m)}\lfloor \frac{n}{T}\rfloor \lfloor \frac{m}{T}\rfloor\sum_{p|T}\mu(\frac{T}{p})

如果∑p|Tμ(Tp)\sum_{p|T}\mu(\frac{T}{p})这个东西能够预处理出来我们就能做到上一题的复杂度

设g(T)=∑p|Tμ(Tp)g(T)=\sum_{p|T}\mu(\frac{T}{p})

预处理方法一:枚举nn以内的素数,用每一个素数来更新它的倍数TT,粗略估计一下复杂度为∑ni=1ni=nlogn(调和级数)\sum_{i=1}^n\frac{n}{i}=nlogn(调和级数)

预处理方法二:…

预处理方法三:…

CODE

于神之怒

题目大意

∑i=1n∑j=1mgcd(i,j)k(mod109+7)\sum_{i=1}^n\sum_{j=1}^mgcd(i,j)^k\pmod {10^9+7}

题解

以下均以n<=m说明n<=m说明

ans令T=dt带入=====∑d=1ndk∑i=1n∑j=1m[gcd(i,j)==d]∑d=1ndk∑i=1n/d∑j=1m/d[gcd(i,j)==1]∑d=1ndk∑i=1n/d∑j=1m/d∑t|gcd(i,j)μ(t)∑d=1ndk∑t=1nμ(t)∑1<=i<=n/d且t|i∑1<=j<=n/d且t|j∑d=1ndk∑t=1nμ(t)⌊ndt⌋⌊mdt⌋\begin{eqnarray*}ans&=&\sum_{d=1}^nd^k\sum_{i=1}^{n}\sum_{j=1}^m[gcd(i,j)==d]\\&=&\sum_{d=1}^nd^k\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}[gcd(i,j)==1]\\&=&\sum_{d=1}^nd^k\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}\sum_{t|gcd(i,j)}\mu(t)\\&=&\sum_{d=1}^nd^k\sum_{t=1}^n\mu(t)\sum_{1<=i<=n/d且t|i}\sum_{1<=j<=n/d且t|j}\\&=&\sum_{d=1}^nd^k\sum_{t=1}^n\mu(t)\lfloor\frac{n}{dt}\rfloor\lfloor\frac{m}{dt}\rfloor\\令T=dt带入\end{eqnarray*}

=∑T=1n⌊nT⌋⌊mT⌋∑d|Tμ(Td)dk\begin{eqnarray*}&=&\sum_{T=1}^n\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor\sum_{d|T}\mu(\frac{T}{d})d^k\end{eqnarray*}

设g(T)=∑d|Tμ(Td)dk设g(T)=\sum_{d|T}\mu(\frac{T}{d})d^k

μ(i)是积性函数,dk也显然是积性的,所以g(T)也就是积性函数了\mu(i)是积性函数,d^k也显然是积性的,所以g(T)也就是积性函数了

我们考虑以下几种情况我们考虑以下几种情况

g(p)=pk−1g(p)=p^k-1

gcd(x,p)=1,那么g(x⋅p)=g(x)⋅g(p)gcd(x,p)=1,那么g(x\cdot p)=g(x)\cdot g(p)

gcd(x,p)!=1,那么g(x⋅p)=g(x)⋅pkgcd(x,p)!=1,那么g(x\cdot p)=g(x)\cdot p^k

至此此题的复杂度为O(n+qn−−√)O(n+q\sqrt{n})

CODE

[BZOJ2693] jzptab/[BZOJ2154] Crash的数字表格

题目大意

∑i=1n∑j=1mlcm(i,j)\sum_{i=1}^n\sum_{j=1}^mlcm(i,j)

题解

以下均以n<=mn<=m说明

ans========∑i=1n∑j=1mijgcd(i,j)∑i=1n∑j=1m∑d=1n[gcd(i,j)==d]ijd∑d=1n∑i=1n/d∑j=1m/d[gcd(i,j)==1]id⋅jdd∑d=1nd∑i=1n/d∑j=1m/d[gcd(i,j)==1]ij∑d=1nd∑i=1n/d∑j=1m/d∑t|gcd(i,j)μ(t)ij∑d=1nd∑t=1n/dμ(t)∑1<=i<=n/d且t|i∑1<=j<=n/d且t|jij∑d=1nd∑t=1n/dμ(t)⋅t2∑i=1n/(dt)∑j=1m/(dt)ij∑d=1nd∑t=1n/dμ(t)⋅t2⋅⌊ndt⌋(⌊ndt⌋+1)2⋅⌊mdt⌋(⌊mdt⌋+1)2\begin{eqnarray*}ans&=&\sum_{i=1}^n\sum_{j=1}^m\frac{ij}{gcd(i,j)}\\&=&\sum_{i=1}^n\sum_{j=1}^m\sum_{d=1}^n[gcd(i,j)==d]\frac{ij}{d}\\&=&\sum_{d=1}^n\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}[gcd(i,j)==1]\frac{id\cdot jd}{d}\\&=&\sum_{d=1}^nd\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}[gcd(i,j)==1]ij\\&=&\sum_{d=1}^{n}d\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}\sum_{t|gcd(i,j)}\mu(t)ij\\&=&\sum_{d=1}^nd\sum_{t=1}^{n/d}\mu(t)\sum_{1<=i<=n/d且t|i}\sum_{1<=j<=n/d且t|j}ij\\&=&\sum_{d=1}^nd\sum_{t=1}^{n/d}\mu(t)\cdot t^2\sum_{i=1}^{n/(dt)}\sum_{j=1}^{m/(dt)}ij\\&=&\sum_{d=1}^nd\sum_{t=1}^{n/d}\mu(t)\cdot t^2\cdot\frac{\lfloor\frac{n}{dt}\rfloor(\lfloor\frac{n}{dt}\rfloor+1)}{2}\cdot\frac{\lfloor\frac{m}{dt}\rfloor(\lfloor\frac{m}{dt}\rfloor+1)}{2}\end{eqnarray*}

令T=dt带入上式令T=dt带入上式

==∑T=1n⌊nT⌋(⌊nT⌋+1)2⋅⌊mT⌋(⌊mT⌋+1)2∑t|Tμ(t)⋅t2⋅Tt∑T=1n⌊nT⌋(⌊nT⌋+1)2⋅⌊mT⌋(⌊mT⌋+1)2⋅T∑t|Tμ(t)⋅t\begin{eqnarray*}&=&\sum_{T=1}^n\frac{\lfloor\frac{n}{T}\rfloor(\lfloor\frac{n}{T}\rfloor+1)}{2}\cdot\frac{\lfloor\frac{m}{T}\rfloor(\lfloor\frac{m}{T}\rfloor+1)}{2}\sum_{t|T}\mu(t)\cdot t^2\cdot \frac{T}{t}\\&=&\sum_{T=1}^n\frac{\lfloor\frac{n}{T}\rfloor(\lfloor\frac{n}{T}\rfloor+1)}{2}\cdot\frac{\lfloor\frac{m}{T}\rfloor(\lfloor\frac{m}{T}\rfloor+1)}{2}\cdot T\sum_{t|T}\mu(t)\cdot t\end{eqnarray*}

写成这种形式就和之前的题目一样了吧,前面分块,后面积性函数搞起来写成这种形式就和之前的题目一样了吧,前面分块,后面积性函数搞起来

设g(T)=T∑t|Tμ(t)⋅t f(T)=∑t|Tμ(t)⋅t设g(T)=T\sum_{t|T}\mu(t)\cdot t\\ \ \ \ f(T)=\sum_{t|T}\mu(t)\cdot t

f(p)=1−pf(p)=1-p

gcd(p,x)=1,那么f(px)=f(p)⋅f(x)gcd(p,x)=1,那么f(px)=f(p)\cdot f(x)

gcd(p,x)!=1,那么f(px)=f(x)gcd(p,x)!=1,那么f(px)=f(x)

ans=∑T=1n⌊nT⌋(⌊nT⌋+1)2⋅⌊mT⌋(⌊mT⌋+1)2⋅g(T)ans=\sum_{T=1}^n\frac{\lfloor\frac{n}{T}\rfloor(\lfloor\frac{n}{T}\rfloor+1)}{2}\cdot\frac{\lfloor\frac{m}{T}\rfloor(\lfloor\frac{m}{T}\rfloor+1)}{2}\cdot g(T)

CODE

[BZOJ3309] DZY Loves Math

题目大意

定义函数f(n),n=pa11pa22⋯pakkf(n),n=p_1^{a_1}p_2^{a_2}\cdots p_k^{a_k},询问

∑i=1n∑j=1mf(gcd(i,j))\sum_{i=1}^n\sum_{j=1}^mf(gcd(i,j))

题解

以下以n<=mn<=m来说明

ans=====∑d=1nf(d)∑i=1n∑j=1m[gcd(i,j==d)]∑d=1nf(d)∑i=1n/d∑j=1m/d∑t|gcd(i,j)μ(t)∑d=1nf(d)∑t=1nμ(t)∑1<=i<=n/d且t|i∑1<=j<=n/d且t|j∑d=1nf(d)∑t=1nμ(t)⋅⌊ndt⌋⌊mdt⌋∑T=1n⌊nT⌋⌊mT⌋∑t|Tμ(t)f(Tt)\begin{eqnarray*}ans&=&\sum_{d=1}^nf(d)\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j==d)]\\&=&\sum_{d=1}^nf(d)\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}\sum_{t|gcd(i,j)}\mu(t)\\&=&\sum_{d=1}^nf(d)\sum_{t=1}^n\mu(t)\sum_{1<=i<=n/d且t|i}\sum_{1<=j<=n/d且t|j}\\&=&\sum_{d=1}^nf(d)\sum_{t=1}^n\mu(t)\cdot \lfloor\frac{n}{dt}\rfloor\lfloor\frac{m}{dt}\rfloor\\&=&\sum_{T=1}^n\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor\sum_{t|T}\mu(t)f(\frac{T}{t})\end{eqnarray*}

又是熟悉的形式,设g(T)=∑t|Tμ(t)f(Tt)又是熟悉的形式,设g(T)=\sum_{t|T}\mu(t)f(\frac{T}{t})

但是这不是积性函数!!!!但是这不是积性函数!!!!

但还是有些性质滴~~但还是有些性质滴~~

T=pa11pa22⋯pakkt=pb11pb22⋯pbkkT=p_1^{a_1}p_2^{a_2}\cdots p_k^{a_k}\\t=p_1^{b_1}p_2^{b_2}\cdots p_k^{b_k}

[BZOJ3994] [SDOI2015]约数个数和

题目大意

定义函数d(n):n的约数个数定义函数d(n):n的约数个数

∑i=1n∑j=1md(i∗j)\sum_{i=1}^n\sum_{j=1}^md(i*j)

题解

ansf(n)=∑i=1n⌊ni⌋=∑i=1nd(n)======∑i=1n∑j=1m[gcd(i,j)==1]⌊ni⌋⌊mj⌋∑i=1n∑j=1m∑d|gcd(i,j)μ(d)⋅⌊ni⌋⌊mj⌋∑d=1nμ(d)∑1<=i<=n且d|i∑1<=j<=n且d|j⌊ni⌋⌊mj⌋∑d=1nμ(d)∑i=1n/d∑j=1m/d⌊nid⌋⌊mjd⌋∑d=1nμ(d)∑i=1n/d⌊nid⌋∑j=1m/d⌊mjd⌋∑d=1nμ(d)f(⌊nd⌋)f(⌊md⌋)\begin{eqnarray*}ans&=&\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)==1]\lfloor\frac{n}{i}\rfloor\lfloor\frac{m}{j}\rfloor\\&=&\sum_{i=1}^n\sum_{j=1}^m\sum_{d|gcd(i,j)}\mu(d)\cdot \lfloor\frac{n}{i}\rfloor\lfloor\frac{m}{j}\rfloor\\&=&\sum_{d=1}^n\mu(d)\sum_{1<=i<=n且d|i}\sum_{1<=j<=n且d|j}\lfloor\frac{n}{i}\rfloor\lfloor\frac{m}{j}\rfloor\\&=&\sum_{d=1}^n\mu(d)\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}\lfloor\frac{n}{id}\rfloor\lfloor\frac{m}{jd}\rfloor\\&=&\sum_{d=1}^n\mu(d)\sum_{i=1}^{n/d}\lfloor\frac{n}{id}\rfloor\sum_{j=1}^{m/d}\lfloor\frac{m}{jd}\rfloor\\f(n)=\sum_{i=1}^n\lfloor\frac{n}{i}\rfloor=\sum_{i=1}^nd(n)\\&=&\sum_{d=1}^n\mu(d)f(\lfloor\frac{n}{d}\rfloor)f(\lfloor\frac{m}{d}\rfloor)\end{eqnarray*}

μ(i),d(i)可以线性筛,然后求前缀和再分块求ans\mu(i),d(i)可以线性筛,然后求前缀和再分块求ans

CODE

[BZOJ3529] [Sdoi2014]数表

题目大意

定义函数F(n):n的约数和F(n):n的约数和

∑i=1n∑j=1mF(gcd(i,j))F(gcd(i,j))<=a(mod231)\sum_{i=1}^n\sum_{j=1}^mF(gcd(i,j))_{F(gcd(i,j))<=a}\pmod {2^{31}}

题解

我们先抛开aa的限制来看

ans(n,m)T=dt====∑d=1nF(d)∑i=1n/d∑j=1m/d[gcd(i,j)==1]∑d=1nF(d)∑i=1n/d∑j=1m/d∑t|gcd(i,j)μ(t)∑d=1nF(d)∑t=1nμ(t)⌊ndt⌋⌊mdt⌋∑T=1n⌊nT⌋⌊mT⌋∑d|Tμ(Td)F(d)\begin{eqnarray*}ans(n,m)&=&\sum_{d=1}^nF(d)\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}[gcd(i,j)==1]\\&=&\sum_{d=1}^nF(d)\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}\sum_{t|gcd(i,j)}\mu(t)\\&=&\sum_{d=1}^{n}F(d)\sum_{t=1}^n\mu(t)\lfloor\frac{n}{dt}\rfloor\lfloor\frac{m}{dt}\rfloor\\T=dt\\&=&\sum_{T=1}^{n}\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor\sum_{d|T}\mu(\frac{T}{d})F(d)\end{eqnarray*}

g(T)=∑d|Tμ(Td)F(d)g(T)=\sum_{d|T}\mu(\frac{T}{d})F(d)

再加上F[gcd(i,j)]<=a的限制再加上F[gcd(i,j)]<=a的限制

只有当F[n]<=a时,才对ans有贡献只有当F
<=a时,才对ans有贡献

离线对a排序后把对答案有贡献的g(i)插进树状数组,O(logN)查询区间和离线对a排序后把对答案有贡献的g(i)插进树状数组,O(logN)查询区间和

CODE
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: