問題描述
斐波那契數列大家都非常熟悉。它的定義是:
f(x) = 1 .... (x=1,2)
f(x) = f(x-1) + f(x-2) .... (x>2)
對於給定的整數 n 和 m,我們希望求出:
f(1) + f(2) + ... + f(n) 的值。但這個值可能非常大,所以我們把它對 f(m) 取模。
公式如下
但這個數字依然很大,所以需要再對 p 求模。
輸入格式
輸入為一行用空格分開的整數 n m p (0 < n, m, p < 10^18)
輸出格式
輸出為1個整數,表示答案
樣例輸入
2 3 5
樣例輸出
0樣例輸入
15 11 29
樣例輸出
25首先我們設s(i)= f(1)+f(2)+...+f(i);
題幹中已經告訴我們n取值很大時s(n)有可能非常大,所以不可能直接算出來
題幹又進一步提示說s(n)對f(m)取模,然後進一步對p取模
我們能夠直接算出的只有f(n)
所以這個題很自然的思路就是通過f(n)的表示式來表示出取模之後的結果
所以我們需要尋找s(n)和f(n)之間的關係。
事實上:s(n)=f(n+2)-1 (i>0)
我們可以通過最原始的方式,檢視規律(證明可用數學歸納法,有待學習、、)
thinking:
設f(i)為斐波那契數列第i項,s(i)=f(1)+f(2)+...+f(i),
i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
f(i) 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610
s(i) 1 2 4 7 12 20 33 54 88 143 232 376 609 ... ...
得到公式之後,繼續分析本題,可知
s(i)%f(m)=(f(i+2)-1)%f(m)
=f(i+2)%f(m)+f(m)-1
=(f(i)+f(i+1))%f(m)+f(m)-1;
**待續...
關於斐波那契數列的一點小結
斐波那契數列就是0,1,1,2,3,5 這樣的一波數列,第三個數是前兩個數的和。兔子問題,上樓梯的台階方法的個數問題,都是斐波那契數列。斐波那契可以簡單的用遞迴實現 1 def fib n 2 calculate the nth fibonacci number 3return n if n 0 n...
關於斐波那契數列
斐波那契數列是一種非常有意思的數列,由 00 0 和 11 1 開始,之後的斐波那契係數就由之前的兩數相加。用數學公式定義斐波那契數列則可以看成如下形式 f0 0f 0 0f0 0f1 1f 1 1f1 1fn fn 1 fn 2f n f f fn fn 1 fn 2 我們約定 fnf nfn 表...
hdu 3936 斐波那契數列 規律
fibonacci數列通項公式 f n 1 5 性質 plain view plain copy print?1.f 0 f 1 f 2 f n f n 2 1。2.f 1 f 3 f 5 f 2n 1 f 2n 3.f 2 f 4 f 6 f 2n f 2n 1 1。4.f 0 2 f 1 2 f...