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}\) 即可。还可以把快速幂换成线性求逆元。

posted @ 2023-01-08 17:15  Epoch_L  阅读(25)  评论(0)    收藏  举报