問題描述
斐波那契數列大家都非常熟悉。它的定義是:
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 求模。
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;
代碼待續...