显然题目就是要我们求 n∑i=1m∑j=1lcm(i,j)。
根据小学奥数,就是 n∑i=1m∑j=1ijgcd(i,j)。
n∑i=1m∑j=1ijgcd(i,j)=min(n,m)∑i=1i∑xi≤ni∑yi≤mi[gcd(x,y)=1]xy
敏锐地察觉到 [n=1] 这个东西可以替换成 ϵ(n)=∑d|nμ(d)。
那么有
min(n,m)∑i=1i∑xi≤ni∑yi≤mi[gcd(x,y)=1]xy=min(n,m)∑i=1i∑xi≤ni∑yi≤mixy∑d|gcd(x,y)μ(d)
根据套路,接着把 d 提出来。
min(n,m)∑i=1i∑xi≤ni∑yi≤mixy∑d|gcd(x,y)μ(d)=min(n,m)∑i=1imin(⌊ni⌋,⌊mi⌋)∑d=1μ(d)d2∑xd≤ni∑yd≤mixy=min(n,m)∑i=1imin(⌊ni⌋,⌊mi⌋)∑d=1μ(d)d2sum(⌊nid⌋,⌊mid⌋)
其中 sum(x,y)=x∑i=1y∑j=1ij=xy(x+1)(y+1)4。
那么预处理 μ(i)i2 的前缀和,做两次数论分块即可。
代码:
1 |
|