题解 【BZOJ3309】DZY Loves Math

问题

传送门

对于正整数 \(n\) ,定义 \(f(n)\)\(n\) 所含质因子的最大幂指数

即对于 \(n=p_1^{c_1}p_2^{c_2}\dots p_k^{c_k}\)\(f(n)=\max \limits{c_i}\)

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

\(n,m\le 10^7\)\(t\le 10^4\) 组数据)

解析

直接按套路化简

\[\begin{align*} &=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}f(gcd(i,j))\\ &=\sum\limits_{k=1}^{n}\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}[gcd(i,j)=k]f(k)\\ &=\sum\limits_{k=1}^{n}\sum\limits_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{k}\rfloor}[gcd(i,j)=1]f(k)\\ &=\sum\limits_{k=1}^{n}\sum\limits_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{k}\rfloor}\sum\limits_{d\mid n}\mu(d)f(k)\\ &=\sum\limits_{k=1}^{n}\sum\limits_{d=1}^{\lfloor\frac{n}{k}\rfloor}\mu(d)f(k)\sum\limits_{i=1}^{\lfloor\frac{n}{k}\rfloor}[d\mid i]\sum\limits_{j=1}^{\lfloor\frac{m}{k}\rfloor}[d\mid j]\\ &=\sum\limits_{k=1}^{n}\sum\limits_{d=1}^{\lfloor\frac{n}{k}\rfloor}\mu(d)f(k)\lfloor\frac{n}{dk}\rfloor\lfloor\frac{m}{dk}\rfloor\\&设 T=dk\\&=\sum\limits_{T=1}^n\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor\sum\limits_{d\mid T}\mu(d)f(\frac{T}{d})\\ \end{align*}\]

现在我们只要预处理出 \(g(n)=\sum\limits_{d\mid n}\mu(d)f(\frac{n}{d})\) 的前缀和就可以了

对于 \(n,m\le 10^7\) 的数据来说,埃氏筛的时间复杂度过高,要使用线性筛

可是 \(g\) 似乎并非积性函数,也无法使用卷积,无法快速求解,怎么办?

观察 \(g\) ,发现 \(\mu\)\(f\) 似乎都和质因数的指数有关,我们从此方向思考

对于 \(d=p_1^{dc_1}p_2^{dc_2}\dots p_k^{dc_k}\), 我们发现 \(\mu(d)\)\(\max \limits{dc_i}\ge 2\) 的情况下值为 \(0\),不予考虑( \(c\) 前的 \(d\) 仅为标识符,无实际意义)

因此对于 \(d\mid n\) 来说,\(dc_i\in\{0,1\}\),所以 \(f(\frac{n}{d})\) 的取值只有可能是 \(f(n)\)\(f(n-1)\) (因为 \(\frac{n}{d}\) 最多只会除掉质因子的一次幂,所以说最大幂指数最多只会减一)

现在我们又设 \(\frac{n}{d}=p_1^{\frac{n}{d}c_1}p_2^{\frac{n}{d}c_2}\dots p_{n-k}^{\frac{n}{d}c_{x}}\dots p_n^{\frac{n}{d}c_k}\),且 \(\frac{n}{d}c_i (x+1\le i\le n)\) 为最大幂指数,那么 \(dc_i\)\(1\le i\le x\) 的取值定然不会影响 \(f(\frac{n}{d})\) 的取值

我们发现,\(dc_i\)\(1\le i\le x\) 的取值一共有 \(2^{x}\) 种(每个位置只能取零和一),而 \(\mu(d)\) 的取值为一和负一的情况(即质因子种类数量为奇数和偶数的情况)刚好相等,各有又因为前面的取值不影响 \(f(\frac{n}{d})\) ,所以说最终取值一定会两两抵消, \(g(n)=0\)

也就是说,若 \(n\) 的幂指数的取值不全部相等,\(g(n)=0\)

\(n\) 的幂指数的取值全部相等,即 \(n=p_1^{c}p_2^{c}\dots p_k^{c}\) ,则 \(dc_i\) 的取值一共有 \(2^{k}\) 种,而 \(\mu(d)\) 的取值为一和负一的情况也相等,正常来讲 \(g(n)\) 的取值应该也是零,但是当 \(dc_i=1(1\le i\le k)\) 时,\(f(\frac{n}{d})\) 的取值比其他的小,为 \(f(n)-1\) ,因此要减去此时 \(\mu(d)=\mu(p_1^1p_2^1\dots p_k^1)\) 的值

也就是说,若 \(n\) 的幂指数的取值全部相等,即 \(n\)等于某个正整数的次方, \(g(n)=-\mu(p_1p_2\dots p_k)\)

综上,若 \(n=p_1^{c}p_2^{c}\dots p_k^{c}\) 时, \(g(n)=-\mu(p_1p_2\dots p_k)\),否则 \(g(n)=0\)

这样,我们枚举 \(i\) ,令 \(g(i^c)=-\mu(i)\) ,其他 \(g(n)=0\) 即可(注意特判 \(n=1\) 的情况)

核心代码

for(int i=2;i<=N;i++){
	if(mu[i]=0)continue;
	for(long long j=i;j<=N;j*=i){
		g[j]=-mu[i];
	}
}
posted @ 2021-07-16 08:17  ezlmr  阅读(52)  评论(0编辑  收藏  举报