HDU 5407
題意:
計算:
LCM(C0N,C1N,C2N,...,CNN)(1<=N<=106)
思路:
先打個表看看?
我們可以發現:
f(3)=f(4)/4,f(5)=f(6)/6,
f(9)=f(10)/10,f(11)=f(12)/12
f(15)=f(16)/16,f(17)=f(18)/18
這個迷之規律會在什麼時候出現呢?“遠離”單個素數冪的時候。
而素數冪會對什麼造成影響呢?結合題目,應該是前n個數的LCM。
所以,規律就是
f(n)=LCM(1,2,3,4,5,..,n+1)n+1
這裡放上嚴格證明:
(http://www.zhihu.com/question/34859879/answer/60168919)
那麼如何計算f(n)呢?
我們設g(n)=LCM(1,2,3,..,n)
如果 n=pk,g(n)=g(n−1)∗p.
否則 g(n)=g(n−1).
所以我們可以先篩出素數表,然後預處理出g(n),然後便可在O(1)的時間內實現查詢。
計算f(n)的時候不能直接除以(n+1),應乘以其逆元.
總復雜度:
預處理:
篩素數 + 求g(n) :O(nlogn)
查詢:O(1)。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxoMyBpZD0="代碼">代碼:
/*
* @author FreeWifi_novicer
* language : C++/C
*/
#include
#include
#include
#include
#include
#include
#include
#include