題解 Fibonacci前n項和

2022-09-09 19:21:24 字數 1005 閱讀 1736

大家知道fibonacci數列吧,f[1]=1,f[2]=1,f[3]=2,f[4]=3……也就是f[n]=f[n-1]+f[n-2]。現在問題很簡單,輸入n和m,求前n項和取模m。

1<=n<=2000000000 1<=m<=1000000010

資料範圍很大,所以遞推肯定是會**的。

我們考慮用矩陣優化,(沒有做過斐波那契數列?那還不快去做!)但是,這下又出現了乙個問題,那就是我們如果直接用矩陣乘法的話只能求出乙個數列的第n項,如何求出前n項的和......嗯,這是個問題。

但是,出題人是不可能自己坑害自己的!所以,這其中肯定是有什麼規律可言。

我們發現:

\[dp[i]=dp[i-1]+dp[i-2]

\]那麼,對於\(dp[n]\),我們能知道:

\[dp[n]=dp[n-1]+dp[n-2]=dp[n-2]+dp[n-3]+dp[n-3]+dp[n-4]=dp[n-2]+dp[n-3]+......=dp[1]+\sum _^ dp[i]

\]也就是說,我們求出來的第n項,其實就是\(dp[1]到dp[n-2]\)的和再加上1。

這就好辦了,我們只要求出第n+2項的值再減去1即可。

code:

#include#include#includeusing namespace std;

typedef long long ll;

ll n,m;

struct matrix

void idenaty()

};matrix mul(matrix a,matrix b)

} }return res;

}matrix power(matrix x,ll p)

return res;

}matrix a;

int main()

/*dp[i]= 1 * dp[i-1] + 1*dp[i-2]

dp[i-1]= 1 * dp[i-1] + 0*dp[i-2]

*/

1643 例 3 Fibonacci 前 n 項和

時間限制 1000 ms 記憶體限制 524288 kb sol 這題應該挺水的吧,就像個板子一樣 1 0 0 1 1 0 1 1 1 第一位是到i的和,第二位是fi 1,第三位是fi 2 每次乘右邊這個矩陣就是轉移一次 1 1 0 1 0 0 1 1 1 1 1 0 include using n...

Fibonacci 前N項平方和 矩陣快速冪

由普通快速冪同理 需要乙個 單位變數s 1 但是矩陣快速冪是矩陣相乘所以需要構造乙個單位矩陣 由於本人沒有學習過線性代數對矩陣方面不是很敏感 所以摸索fn項是矩陣的哪乙個位置很久 這題其他知識相信大家在網上都找的到 但這題真正考得是如何把 fn的前n項平方和轉化 由圖可知前n項平方和可以轉化成 fn...

求前N項和

再做以前的題目,發現解法其實好多種,雖然萬變不離其宗,可是收穫還是好多。時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 張彤彧 浙江大學 本題要求編寫程式,計算序列 2 1 3 2 5 3 8 5 的前n項之和。注意該序列從第2項起,每...