1. 程式人生 > >【題解】BZOJ 2005 [Noi2010]能量採集

【題解】BZOJ 2005 [Noi2010]能量採集

傳送門

Description

根據題目描述以及最基礎的找規律(真的很基礎),答案就是

i=1nj=1m(2gcd(i,j)1)=2i=1nj=1mgcd(i,j)nm

Solution

其實問題的核心就在於求解

i=1nj=1mgcd(i,j)
我們可以令 f(x) 表示 gcd(i,j)x 的個數。

所以我們有

t=min{n,m}i=1nj=1mgcd(i,j)=k=1tf(k)
當然這個可以用 Mobius 反演在 O(nn) 的時間內得到解決,但這裡講一種 O(nlgn) 的做法。

考慮如何計算 f(x)

找到 1n1m 中所有能整除 x 的陣列成的數對, 答案就是

[nx][mx]
但是可以想到這些數對中可能有 gcdx 的倍數的。

舉個例子,令 n=7,m=8,x=2 ,滿足 x|ix|j 的數對

(i,j) 有:

(2,2),(2,4),(2,6),(2,8)(4,2),(4,4),(4,6),(4,8)(6,2),(6,4),(6,6),(6,8)
12 對,但是可以列舉得到