题目:
i=1∑nj=1∑m[gcd(i,j)=k]
做法:
设f(k)为gcd(i,j)=k的个数,
g(k)为满足k∣gcd(i,j)的对数,
那么有下面的关系
g(k)=x=1∑⌊kn⌋f(kx)
我们只需要快速求出g(k),可知如果i,j能被k整数,那么它们可以写成i=k⋅x1,j=k⋅x2的形式,我们只需求多少对x1,x2即可,可得
g(k)=⌊kn⌋⌊km⌋
根据莫比乌斯反演的变形,可求得f(k)
f(k)=x=1∑⌊kn⌋μ(x)g(kx)=x=1∑⌊kn⌋⌊kxn⌋⌊kxm⌋
显然f(k)就是答案,暴力求复杂度是O(n)的,如何快速求?这里可以使用数论分块来做,⌊dn⌋最多有O(n
个取值)
复杂度可以做到O(n+m)