题目链接
做法
首先打表找规律可以得知
令$d=gcd(x,y)$
那么ans就可以换一种表现形式
改变枚举顺序,先枚举d
我们令
考虑$A(x)$比$A(x-1)$多了什么
多的这部分为
显然$A(1)=1$
所以我们这里只需要考虑$x>1$的情况,后面减的那项为0
而由于$i<x$且$gcd(i,x)=1$,所以$gcd(i,x-i)=1$也成立。
这也就意味着所有与$x$互质且小于$x$的数都可以两两组成和为$x$的组。
所以
也就是说
我们再回到开头$ans$的式子
$\lfloor\frac{k}{d}\rfloor$只有$\sqrt{k}=2000$种取值,我们数论分块计算。
而对于$f$就变成了一个单点修改,区间求值的问题。
再注意到实际上修改只用进行$10^4$次,而查询需要$2000*10^4$次。
我们就将序列分块,维护块的前缀和,再维护每个块中的前缀和,就可以做到$O(\sqrt{n})$修改,$O(1)$查询了。
代码
1 |
|