Description
求 ∑ i = 1 n ∑ j = 1 n i j gcd ( i , , j ) \sum_{i=1}^n \sum_{j=1}^n ij \gcd(i,,j) i=1∑nj=1∑nijgcd(i,,j)的值。
请将答案对 P ( 5 × 1 0 8 ≤ P ≤ 1.1 × 1 0 9 ) P(5×10^8≤P≤1.1×10^9) P(5×108≤P≤1.1×109)取模。
Solution
∑ i = 1 n ∑ j = 1 n i j gcd ( i , j ) \sum_{i=1}^n \sum_{j=1}^n ij \gcd(i,j) ∑i=1n∑j=1nijgcd(i,j)
= ∑ k = 1 n k ∑ i = 1 n ∑ j = 1 n i j [ gcd ( i , j ) = k ] =\sum_{k=1}^n k \sum_{i=1}^n \sum_{j=1}^n ij [\gcd(i,j)=k] =∑k=1nk∑i=1n∑j=1nij[gcd(i,j)=k]
= ∑ k = 1 n k 3 ∑ i = 1 ⌊ n k ⌋ ∑ j = 1 ⌊ n k ⌋ i j [ gcd ( i , j ) = 1 ] =\sum_{k=1}^n k^3 \sum_{i=1}^{\lfloor \frac n k \rfloor} \sum_{j=1}^{\lfloor \frac n k \rfloor} ij [\gcd(i,j)=1] =∑k=1nk3∑i=1⌊kn⌋∑j=1⌊kn⌋ij[gcd(i,j)=1]
第二个 ∑ \sum ∑前面的系数为什么是 k 3 k^3 k3呢?因为,后面所有的 i j ij ij都被减小了 k k k倍(因此变成了 [ gcd ( i , j ) ] = 1 [\gcd(i,j)]=1 [gcd(i,j)]=1),以及它原来的系数 k k k,所以新系数应该是 k × k × k = k 3 k×k×k=k^3 k×k×k=k3。
继续推式子:
= ∑ k = 1 n k 3 ∑ i = 1 ⌊ n k ⌋ ∑ j = 1 ⌊ n k ⌋ i j [ gcd ( i , j ) = 1 ] =\sum_{k=1}^n k^3 \sum_{i=1}^{\lfloor \frac n k \rfloor} \sum_{j=1}^{\lfloor \frac n k \rfloor} ij [\gcd(i,j)=1] =∑k=1nk3∑i=1⌊kn⌋∑j=1⌊kn⌋ij[gcd(i,j)=1]
= ∑ k = 1 n k 3 ∑ i = 1 ⌊ n k ⌋ i ∑ j = 1 ⌊ n k ⌋ j [ gcd ( i , j ) = 1 ] =\sum_{k=1}^n k^3 \sum_{i=1}^{\lfloor \frac n k \rfloor} i \sum_{j=1}^{\lfloor \frac n k \rfloor} j [\gcd(i,j)=1] =∑k=1nk3∑i=1⌊kn⌋i∑j=1⌊kn⌋j[gcd(i,j)=1]
可以发现,第三个 ∑ \sum ∑实际要计算所有不大于 i i i且与 i i i互质的数之和。根据 gcd ( i , j ) = gcd ( i , i − j ) \gcd(i,j)=\gcd(i,i-j) gcd(i,j)=gcd(i,i−j),可以发现,与 i i i互质的数能够形成和为 n n n的 φ n 2 \frac {\varphi n} 2 2φn对。所以这些数的和为 n φ n 2 \frac {n\varphi n} 2 2nφn。
带入,得
= ∑ k = 1 n k 3 2 ∑ i = 1 ⌊ n k ⌋ i × i ∗ φ ( i ) 2 =\sum_{k=1}^n k^3\ 2\sum_{i=1}^{\lfloor \frac n k \rfloor} i×\frac {i*\varphi(i)} 2 =∑k=1nk3 2∑i=1⌊kn⌋i×2i∗φ(i)
之所以这里要乘上一个 2 2 2,是因为 ( 3 , 5 ) ( 5 , 3 ) (3,5)(5,3) (3,5)(5,3)是要被算 2 2 2次的,但实则只被算了 1 1 1次。我们抵消掉里面的那个 2 2 2,可以得到:
= ∑ k = 1 n k 3 ∑ i = 1 ⌊ n k ⌋ i 2 ∗ φ ( i ) =\sum_{k=1}^n k^3\ \sum_{i=1}^{\lfloor \frac n k \rfloor} {i^2}*\varphi(i) =∑k=1nk3 ∑i=1⌊kn⌋i2∗φ(i)
于是,我们 O ( n ) O(n) O(n)处理出 i 2 × φ ( i ) i^2×\varphi(i) i2×φ(i)的前缀和,然后做一遍整除分块计算此式即可。
总时间复杂度 O ( n ) O(n) O(n),无法通过本题。
可以发现,第二个
∑
\sum
∑里面是一个前缀和的形式……是否能用杜教筛优化呢?
答案是可以的。设第一个函数为
f
(
x
)
=
x
2
φ
(
x
)
f(x)=x^2 \varphi(x)
f(x)=x2φ(x),第二个函数为
g
(
x
)
g(x)
g(x),考虑它们卷积的形式
∑ x ∣ d f ( x ) g ( d x ) \sum_{x|d} f(x) g(\frac d x) x∣d∑f(x)g(xd)
由于 f ( x ) = x 2 φ ( x ) f(x)=x^2 \varphi(x) f(x)=x2φ(x),其中的那个 x 2 x^2 x2看起来很难看,我们尝试把它消掉。令 g ( x ) = x 2 g(x)=x^2 g(x)=x2即可。
∑ x ∣ d f ( x ) g ( d x ) \sum_{x|d} f(x) g(\frac d x) ∑x∣df(x)g(xd)
= ∑ x ∣ d x 2 φ ( x ) ( d x ) 2 =\sum_{x|d} x^2 \varphi(x) (\frac d x)^2 =∑x∣dx2φ(x)(xd)2
= n 2 ∑ x ∣ d φ ( x ) =n^2 \sum_{x|d} \varphi(x) =n2∑x∣dφ(x)
由于 φ ∗ I = i d \varphi*I=id φ∗I=id,这个式子可以被进一步简写为 n 3 n^3 n3。
根据杜教筛的套路,我们只需要快速计算 f × g f×g f×g的前缀和以及 g g g的前缀和即可快速计算 f f f的前缀和。前者相当于三次方和,后者相当于平方和,可以套用下面的公式进行计算:
∑
i
=
1
n
i
2
=
i
(
i
+
1
)
(
2
i
+
1
)
6
\sum_{i=1}^n i^2=\frac {i(i+1)(2i+1)} 6
i=1∑ni2=6i(i+1)(2i+1)
∑
i
=
1
n
i
3
=
(
i
2
(
i
+
1
)
2
)
4
\sum_{i=1}^n i^3=\frac {(i^2(i+1)^2)} 4
i=1∑ni3=4(i2(i+1)2)
通过线性筛筛出前 2 n 2 3 2n^{\frac 2 3} 2n32至 3 n 2 3 3n^{\frac 2 3} 3n32个答案时复杂度最优,常数最小。
总时间复杂度 O ( n 2 3 ) O(n^{\frac 2 3}) O(n32)。
Summary
可以说每一步都是套路。
首先,我们使用了欧拉反演,将式子化为了 ∑ k = 1 n k 3 ∑ i = 1 ⌊ n k ⌋ i 2 ∗ φ ( i ) \sum_{k=1}^n k^3\ \sum_{i=1}^{\lfloor \frac n k \rfloor} {i^2}*\varphi(i) ∑k=1nk3 ∑i=1⌊kn⌋i2∗φ(i);然后,我们成功构造出了 g g g函数,使得杜教筛有了用武之地。
有时,莫比乌斯反演或许很可爱,但是转变一下思想,使用欧拉反演,也许式子会被简化得更美妙。