Description
有一只马刚开始在 ( 0 , 0 ) (0,0) (0,0),它每次可以走一个 a × b a×b a×b的矩形。如果可以到达无穷大棋盘上的任何一个点,则 p ( a , b ) = 1 p(a,b)=1 p(a,b)=1;否则 p ( a , b ) = 0 p(a,b)=0 p(a,b)=0。
给定 n n n,求 ∑ i = 1 n ∑ j = 1 n p ( i , j ) \sum_{i=1}^n \sum_{j=1}^n p(i,j) i=1∑nj=1∑np(i,j)
由于答案可能过大,请将其对 2 64 2^{64} 264取模。
Solution
不难发现, p ( i , j ) = 1 p(i,j)=1 p(i,j)=1的充分必要条件是 g c d ( i , j ) = 1 gcd(i,j)=1 gcd(i,j)=1且当 i i i与 j j j在模 2 2 2意义下不同余。
等价于我们要计算 ∑ i = 1 n ∑ j = 1 n [ i m o d 2 ≠ j m o d 2 ] [ g c d ( i , j ) = 1 ] \sum_{i=1}^n \sum_{j=1}^n [i\ mod\ 2≠j\ mod\ 2][gcd(i,j)=1] i=1∑nj=1∑n[i mod 2=j mod 2][gcd(i,j)=1]
开始愉快地反演~
∑ i = 1 n ∑ j = 1 n [ i m o d 2 ≠ j m o d 2 ] ∑ d ∣ g c d ( i , j ) μ ( d ) \sum_{i=1}^n \sum_{j=1}^n [i\ mod\ 2≠j\ mod\ 2] \sum_{d|gcd(i,j)} \mu(d) i=1∑nj=1∑n[i mod 2=j mod 2]d∣gcd(i,j)∑μ(d)
= ∑ d = 1 n [ d ∈ o d d ] μ ( d ) ∑ i = 1 n ∑ j = 1 n [ i m o d 2 ≠ j m o d 2 ] [ d ∣ g c d ( i , j ) ] =\sum_{d=1}^n [d∈odd] \mu(d) \sum_{i=1}^n \sum_{j=1}^n [i\ mod\ 2≠j\ mod\ 2][d|gcd(i,j)] =d=1∑n[d∈odd]μ(d)i=1∑nj=1∑n[i mod 2=j mod 2][d∣gcd(i,j)]
= ∑ d = 1 n [ d ∈ o d d ] μ ( d ) f ( n , d ) =\sum_{d=1}^n [d∈odd]\ \mu(d)\ f(n,d) =d=1∑n[d∈odd] μ(d) f(n,d)
这里的 f ( n , d ) = ⌊ n 2 d ⌋ × ( ⌊ n d ⌋ − ⌊ n 2 d ⌋ ) f(n,d)=\lfloor \frac n {2d} \rfloor×(\lfloor \frac n d \rfloor-\lfloor \frac n {2d} \rfloor) f(n,d)=⌊2dn⌋×(⌊dn⌋−⌊2dn⌋)。 ⌊ n 2 d ⌋ \lfloor \frac n {2d} \rfloor ⌊2dn⌋表示在 d d d的倍数中偶数的个数, ( ⌊ n d ⌋ − ⌊ n 2 d ⌋ ) (\lfloor \frac n d \rfloor-\lfloor \frac n {2d} \rfloor) (⌊dn⌋−⌊2dn⌋)显然就是 d d d的倍数中奇数的个数。
可以发现, f f f可以通过整除分块来快速计算,但是我们似乎不能快速求出 ∑ i = l r [ i ∈ o d d ] m u ( i ) \sum_{i=l}^r [i∈odd]\ mu(i) ∑i=lr[i∈odd] mu(i)。这一部分可以拆成两个前缀和相减的形式,现在关键在于如何快速求得 ∑ i = 1 r [ i ∈ o d d ] μ ( i ) \sum_{i=1}^r [i∈odd]\ \mu(i) ∑i=1r[i∈odd] μ(i)。
∑ i = 1 r [ i ∈ o d d ] μ ( i ) \sum_{i=1}^r [i∈odd]\ \mu(i) i=1∑r[i∈odd] μ(i)
= ∑ i = 1 r μ ( i ) − ∑ i = 1 ⌊ r 2 ⌋ μ ( 2 i ) =\sum_{i=1}^r \mu(i)-\sum_{i=1}^{\lfloor \frac r 2 \rfloor} \mu(2i) =i=1∑rμ(i)−i=1∑⌊2r⌋μ(2i)
可以发现,当 i i i为偶数时, μ ( 2 i ) = 0 \mu(2i)=0 μ(2i)=0没有贡献;否则, μ ( 2 i ) = − μ ( i ) \mu(2i)=-\mu(i) μ(2i)=−μ(i)。带入得:
= ∑ i = 1 r μ ( i ) + ∑ i = 1 ⌊ r 2 ⌋ μ ( i ) [ i ∈ o d d ] =\sum_{i=1}^r \mu(i)+\sum_{i=1}^{\lfloor \frac r 2 \rfloor} \mu(i) [i∈odd] =i=1∑rμ(i)+i=1∑⌊2r⌋μ(i)[i∈odd]
根据 ∑ d ∣ r μ ( d ) = [ r = 1 ] \sum_{d|r} \mu(d)=[r=1] ∑d∣rμ(d)=[r=1], ∑ i = 1 r \sum_{i=1}^r ∑i=1r可以通过杜教筛快速计算;后者相当于一个规模减半的问题,可以直接递归下去,边界为 r = 1 r=1 r=1。
本题的解法讲解到此为止。
这样的复杂度为什么是正确的呢?由于杜教筛的复杂度为 O ( n 2 3 ) O(n^{\frac 2 3}) O(n32)(要先预处理出前 2 3 \frac 2 3 32个答案),所以总时间复杂度为
O ( n 2 3 + ( 1 2 n ) 2 3 + ( 1 4 n ) 2 3 + … … ) O(n^{\frac 2 3}+(\frac 1 2 n)^{\frac 2 3}+(\frac 1 4 n)^{\frac 2 3}+……) O(n32+(21n)32+(41n)32+……)
所以总时间复杂度就是
O
(
n
2
3
)
O(n^{\frac 2 3})
O(n32)的,虽然带着比较大的常数。