CF594D
Solution
挺好一道数论题。
考虑到欧拉函数的一个计算方法:
\[\varphi(n)=n\prod_{i=1}^s\frac {p_i-1}{p_i}
\]
那么我们就可以把答案写成:
\[\varphi(\prod_{i=l}^ra_i)=\prod_{i=l}^ra_i\times \prod_i(\frac{p_i-1}{p_i})
\]
其中 \(p_i\) 代表 \([l,r]\) 中所有数质因子的并集。简单点来说,就是区间乘积乘上所有 \(\Large\frac {p_i-1}{p_i}\)。
注意到 \(p_i\) 是不能重复贡献的,这就好比种类,于是我们想到了 P1972,这题就是求区间种类数。所以按照同样的方法,把询问离线并按照右端点排序,依次加入 \(a_i\),用树状数组维护即可。
具体地,对于 \(a_i\) 的一个质因子 \(p_i\),先在 \(i\) 位置上乘 \(\Large\frac {p_i-1}{p_i}\),再记录 \(p_i\) 出现的前一个位置(若没有则不需操作),将其除以 \(\Large\frac {p_i-1}{p_i}\),保证不重复。
其实会 P1972 这题就做完了,做法十分相似。
最后关于常数的问题,不能直接 \(O(\sqrt{n})\) 求质因数,可以先做一遍线筛,把每个数的最小质因子记为 \(f_i\),然后一直 \(p=f_{p}\) 即可。还可以把快速幂换成线性求逆元。

浙公网安备 33010602011771号