[ans=sum_{i=1}^{n}sum_{j=1}^{m}[ageqsum_{d|gcd(i,j)}d] imessum_{d|gcd(i,j)}d
]
我们假设
[G(n,m)=sum_{d|gcd(n,m)}d
]
[n leq m
]
则
[egin{aligned}
G(n,m)
& = sum_{d|gcd(n,m)}d
\ & = sum_{d=1}^{n}d imes[d|gcd(n,m)]
\ & = sum_{d=1}^nd imes[mn=leftlfloordfrac{nm}{d^2}
ight
floor imes d^2]
end{aligned}
]
这个思路有点难走,那我们换个思路
[ans=(sum_{i=1}^nsum_{j=1}^msum_{d|gcd(i,j)}d)-(sum_{i=1}^nsum_{j=1}^m[a<sum_{d|gcd(i,j)}d] imessum_{d|gcd(i,j)}d)
]
我们设前面的式子为sum(n,m),则
[egin{aligned}
sum(n,m)
& =sum_{i=1}^nsum_{j=1}^msum_{d|gcd(i,j)}d
\ & =sum_{d=1}^nd imes leftlfloordfrac{n}{d}
ight
floor imesleftlfloordfrac{m}{d}
ight
floor
end{aligned}
]
这个可以用数论分块
然后我们发现其实后面的式子和上面没有用减法原理的式子一样,所以失败
这个时候,我们发现我们最开始枚举的东西就是除数函数!
(其实我没有发现,是看题解才知道的)
所以我们可以写出sum(n,m)的另一个版本
[egin{aligned}
sum(n,m)
& = sum_{i=1}^nsum_{j=1}^msigma(gcd(i,j))
\ & = sum_{t=1}^{n}sigma(t)sum_{i=1}^{leftlfloordfrac{n}{t}
ight
floor}sum_{j=1}^{leftlfloordfrac{m}{t}
ight
floor}[gcd(i,j)=1]
\ & = sum_{t=1}^{n}sigma(t)sum_{i=1}^{leftlfloordfrac{n}{t}
ight
floor}sum_{j=1}^{leftlfloordfrac{m}{t}
ight
floor}sum_{d|gcd(i,j)}mu(d)
\ & = sum_{t=1}^{n}sigma(t)sum_{d=1}^{leftlfloordfrac{n}{t}
ight
floor}mu(d)leftlfloordfrac{n}{dt}
ight
floorleftlfloordfrac{m}{dt}
ight
floor
\ & =sum_{T=1}^{n}leftlfloordfrac{n}{T}
ight
floorleftlfloordfrac{m}{T}
ight
floorsum_{d|T}sigma(d)mu(frac{T}{d})
end{aligned}
]
此时,前面的求和可以分块(O(n + m)),后面的是个积性函数,可以预处理,然后就是O(1)
但是,不是每个东西都对答案有贡献,所以我们要排除掉没有贡献的.
然后就需要维护答案,想到维护这个词,在看一下式子,
[ ext{单点修改,区间查询}
]
这不就是树状数组吗?
我们可以维护一个树状数组来存储合法的点,然后取出进行统计就可以了