問題:形如1+p+p^2+p^3+p^4+...+p^c=?
解析:分治的思想,就是把乙個問題劃分為若干個規模更小的同類子問題,對這些子問題遞迴求解,然後在回溯時通過它們推導出原問題的解。
對於此問題,我們就可以直接轉化為求更小的等比數列和的問題。相信很容易想到的思路就是先求p^0,然後再求p^1 累加,然後在此基礎上求p^2 累加....... ,這種方法耗費的時間是很長的,對此我們通常可以用二分的思想進行解決。
分析:若c為奇數時:(因為p的次方是從0開始的,所以當p為奇數時其實是有偶數個的)
sum(p,c)=(1+p+p^2+p^3+...+p^(c-1)/2 ) + ( p^ ( c+1 )/2+...+p^c)
=(1+p+.....+p^(c-1)/2)+p^(c+1)/2*(1+p+...+p^(c-1)/2)
=(1+p^(c+1)/2)*sum(p,(c-1)/2)
若c為偶數時(當p為偶數的時候,實際個數為奇數個)類似的:
sum(p,c)=(1+p^(c/2) )*sum(p,(c/2)-1)+p^c
理解:因為當c為奇數的時候在計算機中c/2表示的是下取整整數,就像0,1,2,3,4,5,6,7 (7-1)/2=3,(7+1)/2=4
而為偶數的時候c/2就表示的是中間的那個數,0,1,2,3,4,5,6 6/2=3
因此在分治的時候,當c為奇數的時候我們選擇在(c-1)/2 和 (c+1)/2 之間進行劃分,當c為偶數的時候,在 c/2 - 1 和 c/2 中間進行劃分, 然後最後會剩下乙個p^c
練習,等比數列求和
description 已知q與 n,求等比數列之和 1 q q2 q3 q4 qn input 輸入一對資料,含有乙個整數n 1 n 20 乙個小數 q 0 q 2 output 對於每組資料n和q 計算其等比數列的和,精確到小數點後 5位。sample input 5 1.2 sample ou...
Alternating Sum 等比數列 逆元
給你 n,a,b,k string s n,a,b 1e9 k 1e5 問題是利用上面的引數求乙個式子。其中s i 是有符號位。題目說明了,超過了字串s長度就會取餘進行迴圈。就是 s i k 這個題明顯就是利用迴圈節求解。因為n的值太大,跑不完。所以我們需要找到迴圈節直接的關係。後來通過觀察就知道其...
1 1 等 比 數 列
已知 q 與 n,求等比數列之和 輸入資料不多於 50 對,每對資料含有乙個整數 n 1 n 20 乙個小數q 0對於每組資料 n 和 q,計算其等比數列的和,精確到小數點後 3 位,每個計算結果應單獨佔一行。6 0.3 5 1.3 1.428 12.756 include include usin...