洛谷10月月赛II T4象棋与马——莫反出手,杜教筛相助

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=1nj=1np(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=1nj=1n[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=1nj=1n[i mod 2=j mod 2]dgcd(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=1n[dodd]μ(d)i=1nj=1n[i mod 2=j mod 2][dgcd(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=1n[dodd] μ(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×(dn2dn) ⌊ 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) (dn2dn)显然就是 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[iodd] mu(i)。这一部分可以拆成两个前缀和相减的形式,现在关键在于如何快速求得 ∑ i = 1 r [ i ∈ o d d ]   μ ( i ) \sum_{i=1}^r [i∈odd]\ \mu(i) i=1r[iodd] μ(i)

∑ i = 1 r [ i ∈ o d d ]   μ ( i ) \sum_{i=1}^r [i∈odd]\ \mu(i) i=1r[iodd] μ(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=1rμ(i)i=12rμ(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=1rμ(i)+i=12rμ(i)[iodd]

根据 ∑ d ∣ r μ ( d ) = [ r = 1 ] \sum_{d|r} \mu(d)=[r=1] drμ(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)的,虽然带着比较大的常数

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值