题解 【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}\)
求
(\(n,m\le 10^7\) , \(t\le 10^4\) 组数据)
解析
直接按套路化简
现在我们只要预处理出 \(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];
}
}