實現分治法求等比數列和

2021-08-28 05:12:58 字數 766 閱讀 6608

問題:形如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...