推式子。

莫比乌斯函数

μ\mu 为莫比乌斯函数,定义为

μ(n)={1n=10n 含有平方因子(−1)kk 为 n 的本质不同质因子个数\mu(n)= \begin{cases} 1&n=1\\ 0&n\text{ 含有平方因子}\\ (-1)^k&k\text{ 为 }n\text{ 的本质不同质因子个数}\\ \end{cases}

预处理可以用线性筛。

代码
C++
void init(){
	mu[1]=1;
	for(int i=2;i<=50000;i++){
		if(!hs[i]){
			pri[++cnt]=i;
			mu[i]=-1;
		}
		for(int j=1;j<=cnt&&pri[j]*i<=50000;j++){
			hs[pri[j]*i]=1;
			if(i%pri[j]==0){
				mu[i*pri[j]]=0;
				break;
			}
			mu[i*pri[j]]=-mu[i];
		}
	} 
}

这个函数还有一个很神奇的用法,就是 μ(x)2\mu(x)^2 可以表示这个数是否含有平方因子。

∑k=1xμ2(x)=∑k=1μ(k)⌊xk2⌋\sum_{k=1}^x\mu^2(x)=\sum_{k=1}\mu(k)\lfloor\frac{x}{k^2}\rfloor

性质

sn=[n=1]=∑d∣nμ(d)s_n = [n=1] = \sum_{d|n}\mu(d) s(n)={1n=10n>1s(n)= \begin{cases} 1&n=1\\ 0&n>1\\ \end{cases}
证明

SS 是质因数下标集合。

∑d∣nμ(d)=∑S⊆{1,…,k}μ ⁣(∏i∈Spi)=∑S⊆{1,…,k}(−1)∣S∣=∑j=0k(kj)(−1)j=(1−1)k=0.\sum_{d\mid n}\mu(d)=\sum_{S\subseteq\{1,\dots,k\}}\mu\!\left(\prod_{i\in S}p_i\right)=\sum_{S\subseteq\{1,\dots,k\}}(-1)^{|S|}=\sum_{j=0}^{k}\binom{k}{j}(-1)^j=(1-1)^k=0.

需要用到二项式定理:

(a+b)n=∑i=0n(ni)an−ibi(a+b)^n=\sum_{i=0}^n\binom{n}{i}a^{n-i}b^i
[i⊥j]=[gcd⁡(i,j)=1]=∑d∣gcd⁡(i,j)μ(d)=∑d[d∣i][d∣j]μ(d)[i\perp j] = [\gcd(i,j) = 1] = \sum_{d\mid\gcd(i,j)} \mu(d) = \sum_{d}[d\mid i][d\mid j]\mu(d)

常见技巧

∑i=1n∑j=1m[gcd⁡(i,j)=k]=∑i=1⌊nk⌋∑j=1⌊mk⌋[gcd⁡(i,j)=1]\sum_{i=1}^{n} \sum_{j=1}^{m} [\gcd(i,j) = k] = \sum_{i=1}^{\lfloor \frac{n}{k} \rfloor} \sum_{j=1}^{\lfloor\frac{m}{k} \rfloor} [\gcd(i,j) = 1] [gcd⁡(i,j)=1]=∑d∣gcd⁡(i,j)μ(d)=∑d[d∣i][d∣j]μ(d)[\gcd(i,j) = 1] = \sum_{d\mid\gcd(i,j)} \mu(d) = \sum_{d}[d\mid i][d\mid j]\mu(d)

∑d=1ndk∑x=1⌊nd⌋μ(x)⌊ndx⌋⌊ndx⌋\sum\limits_{d=1}^n d^k\sum\limits_{x=1}^{\lfloor\frac{n}{d}\rfloor}\mu(x)\lfloor\dfrac{n}{dx}\rfloor\lfloor\dfrac{n}{dx}\rfloor

然后我们令 T=dxT=dx:

∑T=1n⌊nT⌋⌊mT⌋∑d∣Tdkμ(Td)\sum\limits_{T=1}^n\lfloor\dfrac{n}{T}\rfloor\lfloor\dfrac{m}{T}\rfloor\sum\limits_{d|T}d^k\mu(\dfrac{T}{d})


莫比乌斯反演

如果:f(n)=∑d∣ng(d)f(n)=\sum_{d\mid n}g(d)。

那么:g(n)=∑d∣nμ(d)f(nd)g(n)=\sum_{d\mid n}\mu(d)f(\frac{n}{d})。

证明∑d∣nμ(d)f(nd)=∑d∣nμ(d)∑i∣ndg(i)=∑i∣ng(i)∑d∣niμ(d)=∑i∣ng(i)[ni=1]=g(n) \begin{aligned} \sum_{d\mid n}\mu(d)f(\frac{n}{d}) &=\sum_{d\mid n}\mu(d)\sum_{i\mid \frac{n}{d}}g(i)\\ &=\sum_{i \mid n }g(i)\sum_{d\mid \frac{n}{i}}\mu(d)\\ &=\sum_{i \mid n }g(i)[\frac{n}{i}=1]\\ &=g(n)\\ \end{aligned}

还有另一种更常用形式,枚举倍数:

若果:f(n)=∑n∣dg(d)f(n)=\sum_{n|d}g(d)

那么:g(n)=∑n∣dμ(dn)f(d)g(n)=\sum_{n|d}\mu(\frac{d}{n})f(d)

证明∑n∣dμ(dn)f(d)=∑n∣dμ(dn)∑d∣kg(k)=∑n∣kg(k)∑n∣d[dn∣kn]μ(dn)=∑n∣kg(k)∑dn∣knμ(dn)=∑n∣kg(k)[kn=1]=g(n)\begin{aligned} \sum_{n\mid d}\mu(\frac{d}{n})f(d) &=\sum_{n\mid d}\mu(\frac{d}{n})\sum_{d\mid k}g(k)\\ &=\sum_{n\mid k}g(k)\sum_{n\mid d}[\frac{d}{n}\mid \frac{k}{n}]\mu(\frac{d}{n})\\ &=\sum_{n\mid k}g(k)\sum_{\frac{d}{n}\mid \frac{k}{n}}\mu(\frac{d}{n})\\ &=\sum_{n\mid k}g(k)[\frac{k}{n}=1]\\ &=g(n)\\ \end{aligned}

很多时候,我们发现题目中一个函数好求,一个不好求,那么我们可以考虑用好求的那个表示出那个不好求的。

推论

d(ij)=∑x∣i∑y∣j[gcd⁡(x,y)=1]d(ij)=\sum\limits_{x\mid i}\sum\limits_{y\mid j} [\gcd(x,y)=1]

来自 P3327 [SDOI2015] 约数个数和。

我们考虑证明,我们发现最困难的是很难保证不计算重复。

我们用一个比较人类智慧的想法:对于每一个 pkp^k,令 ii 中有 pap^a:

  • 如果 k≤ak\le a,那么 ii 中有 pkp^k 则表示这个因数有 pkp^k。
  • 如果 k>ak>a,jj 中有 pk−ap^{k-a} 则表示这个因数有 pkp^k。

P2522 [HAOI2011] Problem b

P2522 [HAOI2011] Problem b。

f(n)=∑i=1n∑j=1m[gcd⁡(i,j)=n]f(n)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}[\gcd(i,j)=n]

F(n)=∑n∣df(d)=⌊an⌋⌊bn⌋F(n)=\sum_{n|d}f(d)=\lfloor\frac{a}{n}\rfloor\lfloor\frac{b}{n}\rfloor

用莫比乌斯反演再推回 ff。

再加上整除分块就行了。

核心代码
C++
int calc(int n,int m,int k){
	int res=0;
	for(int l=1,r;l<=min(n/k,m/k);l=r+1){
		r=min((n/k)/(int)(n/l/k),(m/k)/(int)(m/l/k));
		res+=(sum[r]-sum[l-1])*(n/l/k)*(m/l/k);
	}
	return res;
}

P3327 [SDOI2015] 约数个数和

P3327 [SDOI2015] 约数个数和。

∑i=1n∑j=1m∑x∣i∑y∣j[gcd⁡(x,y)=1]\sum\limits_{i=1}^n\sum\limits_{j=1}^m\sum\limits_{x\mid i}\sum\limits_{y\mid j} [\gcd(x,y)=1]

推导

∑x=1n∑y=1m⌊nx⌋⌊my⌋[gcd⁡(x,y)=1]\sum\limits_{x=1}^n\sum\limits_{y=1}^m \lfloor\frac{n}{x}\rfloor \lfloor\frac{m}{y}\rfloor [\gcd(x,y)=1]

∑i=1n∑j=1m⌊ni⌋⌊mj⌋[gcd⁡(i,j)=1]\sum\limits_{i=1}^n\sum\limits_{j=1}^m \lfloor\frac{n}{i}\rfloor \lfloor\frac{m}{j}\rfloor[\gcd(i,j)=1]

f(x)=∑i=1n∑j=1m⌊ni⌋⌊mj⌋[gcd⁡(i,j)=x]f(x)=\sum\limits_{i=1}^n\sum\limits_{j=1}^m \lfloor\frac{n}{i}\rfloor \lfloor\frac{m}{j}\rfloor[\gcd(i,j)=x]

g(x)=∑x∣df(d)g(x)=\sum_{x\mid d} f(d)

g(x)=∑i=1n∑j=1m⌊ni⌋⌊mj⌋[x∣gcd⁡(i,j)]g(x)=\sum\limits_{i=1}^n\sum\limits_{j=1}^m \lfloor\frac{n}{i}\rfloor \lfloor\frac{m}{j}\rfloor[x\mid\gcd(i,j)]

g(x)=∑i=1nx∑j=1mx⌊nix⌋⌊mjx⌋g(x)=\sum\limits_{i=1}^{\frac{n}{x}}\sum\limits_{j=1}^{\frac{m}{x}} \lfloor\frac{n}{ix}\rfloor \lfloor\frac{m}{jx}\rfloor

f(n)=∑n∣dμ(dn)g(d)f(n)=\sum\limits_{n\mid d}\mu(\frac{d}{n})g(d)

f(1)=∑1∣dμ(d1)g(d)=∑i=1nμ(i)g(i)f(1)=\sum\limits_{1\mid d}\mu(\frac{d}{1})g(d)=\sum_{i=1}^n \mu(i)g(i)

预处理 S(t)=∑i=1t⌊ti⌋S(t) = \sum_{i=1}^{t} \left\lfloor\frac{t}{i}\right\rfloor,然后整除分块。

另一种形式

我们直接利用下面的式子带进去做:

[gcd⁡(i,j)=1]=∑d∣gcd⁡(i,j)μ(d)=∑d[d∣i][d∣j]μ(d)[\gcd(i,j) = 1] = \sum_{d\mid\gcd(i,j)} \mu(d) = \sum_{d}[d\mid i][d\mid j]\mu(d)

常见技巧:

∑i=1n∑j=1m[gcd⁡(i,j)=k]=∑i=1⌊nk⌋∑j=1⌊mk⌋[gcd⁡(i,j)=1]\sum_{i=1}^{n} \sum_{j=1}^{m} [\gcd(i,j) = k] = \sum_{i=1}^{\lfloor \frac{n}{k} \rfloor} \sum_{j=1}^{\lfloor\frac{m}{k} \rfloor} [\gcd(i,j) = 1]

∑d=1ndk∑x=1⌊nd⌋μ(x)⌊ndx⌋⌊ndx⌋\sum\limits_{d=1}^n d^k\sum\limits_{x=1}^{\lfloor\frac{n}{d}\rfloor}\mu(x)\lfloor\dfrac{n}{dx}\rfloor\lfloor\dfrac{n}{dx}\rfloor

然后我们令 T=dxT=dx:

∑T=1n⌊nT⌋⌊mT⌋∑d∣Tdkμ(Td)\sum\limits_{T=1}^n\lfloor\dfrac{n}{T}\rfloor\lfloor\dfrac{m}{T}\rfloor\sum\limits_{d|T}d^k\mu(\dfrac{T}{d})


P3704 [SDOI2017] 数字表格

P3704 [SDOI2017] 数字表格。

实在不想打 Latex 了,那就 ctj 吧。

=∏i=1N∏j=1MFgcd⁡(i,j)=∏k=1NFk(∑i=1N  ∑j=1M  [gcd⁡(i,j)=k])\begin{aligned}&=\prod_{i=1}^{N}\prod_{j=1}^{M}F_{\gcd(i,j)} \\ &=\prod_{k=1}^{N}{F_{k}}^{\left(\sum_{i=1}^{N}\;\sum_{j=1}^{M}\;\left[\gcd(i,j)=k\right]\right)}\end{aligned}

=∑i=1N∑j=1M[gcd⁡(i,j)=k]=∑i=1⌊Nk⌋∑j=1⌊Mk⌋[gcd⁡(i,j)=1]=∑d=1⌊Nk⌋μ(d)⌊Nkd⌋⌊Mkd⌋\begin{aligned}&= \sum_{i=1}^{N}\sum_{j=1}^{M}\left[\gcd(i,j)=k\right]\\&= \sum_{i=1}^{\left\lfloor\frac{N}{k}\right\rfloor}\sum_{j=1}^{\left\lfloor\frac{M}{k}\right\rfloor}\left[\gcd(i,j)=1\right]\\&= \sum_{d=1}^{\left\lfloor\frac{N}{k}\right\rfloor}\mu(d)\left\lfloor\frac{N}{kd}\right\rfloor\left\lfloor\frac{M}{kd}\right\rfloor\end{aligned}

=∏k=1NFk(∑d=1⌊Nk⌋μ(d)⌊Nkd⌋⌊Mkd⌋)=∏T=1N(∏k∣TFkμ(Tk))⌊NT⌋⌊MT⌋\begin{aligned} &= \prod_{k=1}^{N}{F_{k}}^{\left(\sum_{d=1}^{\left\lfloor\frac{N}{k}\right\rfloor}\mu(d)\left\lfloor\frac{N}{kd}\right\rfloor\left\lfloor\frac{M}{kd}\right\rfloor\right)}\\ &= \prod_{T=1}^{N}\left(\prod_{k|T}{F_{k}}^{\mu(\frac{T}{k})}\right)^{\left\lfloor\frac{N}{T}\right\rfloor\left\lfloor\frac{M}{T}\right\rfloor} \end{aligned}

令 f(n)=∏d∣nFdμ(nd)f(n)=\prod_{d|n}{F_{d}}^{\mu(\frac{n}{d})},可以预处理。

=∏T=1Nf(T)⌊NT⌋⌊MT⌋=\prod_{T=1}^{N}{f(T)}^{\left\lfloor\frac{N}{T}\right\rfloor\left\lfloor\frac{M}{T}\right\rfloor}

分块。

注意:指数不要取模!

P3911 最小公倍数之和

P3911 最小公倍数之和。

令 cic_i 表示 ii 出现的次数。

∑i=1n∑j=1nci×cj×lcm(i,j)\sum_{i=1}^n \sum_{j=1}^nc_i \times c_j \times lcm(i,j)

∑i=1n∑j=1nci×cj×i×jgcd(i,j)\sum_{i=1}^n \sum_{j=1}^nc_i \times c_j \times \frac{i \times j}{gcd(i,j)}

∑k=1n∑i=1n∑j=1n[gcd(i,j)=k]ci×cj×i×jk\sum_{k=1}^n\sum_{i=1}^n \sum_{j=1}^n [gcd(i,j)=k] c_i \times c_j \times \frac{i \times j}{k}

∑k=1n∑i=1⌊nk⌋∑j=1⌊nk⌋[gcd(i,j)=1]cik×cjk×i×j×k\sum_{k=1}^n\sum_{i=1}^{\lfloor \frac{n}{k} \rfloor } \sum_{j=1}^{\lfloor \frac{n}{k} \rfloor} [gcd(i,j)=1] c_{ik} \times c_{jk} \times i \times j \times k

∑k=1n∑i=1⌊nk⌋∑j=1⌊nk⌋∑d∣gcd(i,j)μ(d)×cik×cjk×i×j×k\sum_{k=1}^n\sum_{i=1}^{\lfloor \frac{n}{k} \rfloor } \sum_{j=1}^{\lfloor \frac{n}{k} \rfloor} \sum_{d|gcd(i,j)}\mu(d) \times c_{ik} \times c_{jk} \times i \times j \times k

∑k=1n∑d=1⌊nk⌋μ(d)×d2∑i=1⌊nkd⌋∑j=1⌊nkd⌋cikd×cjkd×i×j×k\sum_{k=1}^n\sum_{d=1}^{\lfloor \frac{n}{k} \rfloor} \mu(d) \times d^2 \sum_{i=1}^{\lfloor \frac{n}{kd} \rfloor } \sum_{j=1}^{\lfloor \frac{n}{kd} \rfloor} c_{ikd} \times c_{jkd} \times i \times j \times k

∑k=1n∑kd=1nμ(d)×d2∑i=1⌊nkd⌋∑j=1⌊nkd⌋cikd×cjkd×i×j×k\sum_{k=1}^n\sum_{kd=1}^{n}\mu(d) \times d^2\sum_{i=1}^{\lfloor \frac{n}{kd} \rfloor } \sum_{j=1}^{\lfloor \frac{n}{kd} \rfloor} c_{ikd} \times c_{jkd} \times i \times j \times k

∑T=1nT(∑d∣Tμ(d)×d)∑i=1⌊nT⌋∑j=1⌊nT⌋ciT×cjT×i×j\sum_{T=1}^n T(\sum_{d|T}\mu(d) \times d )\sum_{i=1}^{\lfloor \frac{n}{T} \rfloor } \sum_{j=1}^{\lfloor \frac{n}{T} \rfloor} c_{iT} \times c_{jT} \times i \times j

∑T=1nT(∑d∣Tμ(d)×d)(∑i=1⌊nT⌋ciT×i)2\sum_{T=1}^n T(\sum_{d|T}\mu(d) \times d ) (\sum_{i=1}^{\lfloor \frac{n}{T} \rfloor } c_{iT} \times i)^2

左边的括号预处理,右边的暴力。

P5221 Product

P5221 Product。

∏i=1n∏j=1nlcm(i,j)gcd(i,j)\prod_{i=1}^{n}\prod_{j=1}^{n}\frac{lcm(i,j)}{gcd(i,j)}

=∏i=1n∏j=1ni∗jgcd(i,j)2=\prod_{i=1}^{n}\prod_{j=1}^{n}\frac{i*j}{gcd(i,j)^2}

=(∏i=1n∏j=1ni∗j)∗(∏i=1n∏j=1ngcd(i,j))−2=(\prod_{i=1}^{n}\prod_{j=1}^{n}i*j)*(\prod_{i=1}^{n}\prod_{j=1}^{n}gcd(i,j))^{-2}

左边的直接计算,右边的:

=\prod_{d=1}^{n}\prod_{i=1}^{n}\prod_{j=1}^{n}[gcd(i,j)==d]\\ =\prod_{d=1}^{n}d^{\sum_{i=1}^{\frac{n}{d}}\sum_{j=1}^{\frac{n}{d}}[gcd(i,j)==1]}$$ 也就是对于每一个 $d$ 看有多少个。 然后可以直接莫反(反正 DS 代码过了),但是欧拉函数更方便:

(n!)^{2n}(\Pi_{d=1}^{n}d^{(2\sum_{i=1}^{\frac{n}{d}}\phi(i))-1})^{-2}

注意需要减去 $(1,1)$ 的重复。然后根据欧拉定理对指数取模 $mod-1$ 优化。 ### P4240 毒瘤之神的考验 [P4240 毒瘤之神的考验](https://www.luogu.com.cn/problem/P4240)。

\begin{aligned}

\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m} \varphi(ij)

&= \sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m} \frac{\varphi(i)\varphi(j)\gcd(i,j)}{\varphi(\gcd(i,j))}

\&= \sum\limits_{d=1}^{n}\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m} \frac{\varphi(i)\varphi(j)d[\gcd(i,j)=d]}{\varphi(d)}

\&= \sum\limits_{d=1}^{n}\frac{d}{\varphi(d)}\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m }\varphi(i)\varphi(j)[\gcd(i,j)=d]

\&= \sum\limits_{d=1}^{n}\frac{d}{\varphi(d)}\sum_{t=1}^{\lfloor\frac{n}{d}\rfloor}\mu(t)\cdot \sum\limits_{i=1}^{\lfloor\frac{n}{dt}\rfloor }\sum\limits_{j=1}^{\lfloor\frac{m}{dt}\rfloor }\varphi(idt)\varphi(jdt)

\&= \sum\limits_{d=1}^{n}\frac{d}{\varphi(d)}\sum_{t=1}^{\lfloor\frac{n}{d}\rfloor}\mu(t)\cdot \sum\limits_{i=1}^{\lfloor\frac{n}{dt}\rfloor }\sum\limits_{j=1}^{\lfloor\frac{m}{dt}\rfloor }\varphi(idt)\varphi(jdt)

\&= \sum\limits_{T=1}^{n}\sum\limits_{d|T} \frac{d\cdot\mu(\frac{T}{d})}{\varphi(d)} \sum\limits_{i=1}^{\lfloor\frac{n}{T}\rfloor }\varphi(ik)\sum\limits_{j=1}^{\lfloor\frac{m}{T}\rfloor }\varphi(jk)

\end{aligned}

\begin{aligned} f(T) = \sum\limits_{d|T} \frac{d\cdot\mu(\frac{T}{d})}{\varphi(d)}\ g(T, n) = \sum\limits_{i=1}^{n}\varphi(iT) \end{aligned}

$f$ 可以套路化倍数 $O(n\ln n)$ 预处理,$g$ 递推总状态数 $O(n\ln n)$ 级别。 带回原式:

\sum\limits_{T=1}^{n}f(T)\cdot g(T, \lfloor\frac{n}{T}\rfloor )\cdot g(T,\lfloor\frac{m}{T}\rfloor)

令:令:

\begin{aligned} t(a,b,n) = \sum\limits_{T=1}^{n}f(T)\cdot g(T,a)\cdot g(T,b) \end{aligned}

复杂度还是不对,所以我们尝试优化。我们发现这个东西带有 $\frac{m}{i}$ 这种东西,所以可以尝试根号分治。 - $T$ 很小的时候我们可以暴力枚举 $T$ 计算。 - $T$ 很大的时候我们使用预处理的东西计算。