简单数学推导与数据结构的结合
jys
posted @ May 14, 2014 08:43:39 PM
in 未分类
, 951 阅读
http://cdqz.openjudge.cn/2015/1050/
考虑一个数组A[1..n],求:sigma(i,j=1..n:gcd(A[i],A[j]))=sigma(i,j=1..n:sigma(d|A[i]&&d|A[j]:μ(d)))=sigma(d=1..n:μ(d)*cnt[d]*cnt[d]),其中cnt[i]表示A[]数组中i的倍数的数的个数
考虑莫队算法
问题变成加/减一个数,同时维护答案
考虑到这里的d只能是新加进的数A[t]的因子,再配合cnt和预处理的μ数组可以搞
10000以内的数最多只有64个因子,所以是O(64msqrt(n))的效率
别人的题解:http://www.cnblogs.com/oldmanren/p/3661936.html
看不太懂,不知道是不是这意思
有这个方法的话就可以搞一些莫名其妙让人第一眼摸不着头脑的区间询问题了