Description
题目链接:BZOJ 3813
在一片美丽的大陆上有 $100000$ 个国家,每个国家有一个银行。某大公司的领袖在这 $100000$ 个银行开户时都存了 $3$ 大洋,他惜财如命,因此会不时地派小弟 GFS 清点一些银行的存款或者让 GFS 改变某个银行的存款。这里发行的软妹面额是最小的 $60$ 个素数,任何人的财产都只能由这 $60$ 个基本面额表示。
领袖习惯将一段编号连续的银行里的存款拿到一个账房去清点。如果领袖选择清点编号在 $[a,b]$ 内的银行财产,他会先对 $[a,b]$ 的财产求和(计为 $\text{product}$),然后在编号属于 $[1,\text{product}]$ 的账房中选择一个去清点存款。一个账房 $\text{number}$ 可能被选中当且仅当 $\gcd(\text{product},\text{number})=1$。当领袖又赚大钱了的时候,他会在某个银行改变存款,但是领袖不会在某个银行的存款总数超过 $10^6$。
现在 GFS 预先知道了领袖的清点存款与变动存款的 $x$ 次计划,想请你告诉他,每次清点存款时领袖有多少个账房可以供他选择,当然这个值可能非常大,GFS 只想知道对 $19961993$ 取模后的答案。
数据范围:$1\le x\le 10^5$
Solution
我们注意到,每个数的标准分解形式中只有可能出现前 $60$ 个数字,那么我们考虑用线段树维护区间内每个质因子是否出现过(笔者使用压位,用 $\text{long long}$ 储存,操作起来较为简单),并维护区间内的乘积。统计答案时,我们只需要求出区间的乘积的 $\varphi$ 函数值即可。
时间复杂度:$O(60\cdot m\log n)$
Code
1 |
|