歷屆試題 斐波那契
時間限制:1.0s 記憶體限制:256.0mb
問題描述
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(n)=f(n+2)-1
原式=(f(n+2)-1)%f(m)%p 再利用矩陣快速冪求f()
code:
#include#includeusing namespace std;
typedef long long ll;
ll llmul( ll a,ll b,ll mod ) ;
matrix i = ;
matrix a = ;
matrix multi(matrix a, matrix b)
return c;
}
matrix power(matrix a, ll n)
n >>= 1;
p = multi(p, p);
}return ans;
}
//計算f(n) % mod
ll getfun(ll n)
//計算f(m - 1) * f(n % m) mod f(m)
ll getres(ll n, ll m)
ll solve(ll n, ll m)
else
}ll getresponse(ll n, ll m)
int main()
return 0;
}
斐波那契(矩陣快速冪)
斐波那契數列,即fib n fib n 1 fib n 2 fib n fib n 1 fib n 2 fib n fib n 1 fi b n 2 就這麼乙個數列,顯然可以直接遞推求解,時間複雜度o n o n o n 似乎沒什麼問題。然後就遇到了這個,n nn的取值範圍最大是2 1 09 2 t...
矩陣快速冪 斐波那契數列
time limit 1000 ms memory limit 128 mb 通過小l的不懈努力,他即將成為大神啦,他登上了大神專屬的頒獎臺。在頒獎台上,他即將領取代表著大神的無限榮譽的勳章。小l走上頒獎台後,在台上發現了乙個製作精美的盒子。榮譽勳章就在盒子裡面。小l發現這個盒子被上了鎖,在這個盒子...
矩陣快速冪 斐波那契數列
先來實現乙個矩陣相乘的函式吧。const int mod 10000 struct mat mat mat mul mat x,mat y 實現兩個矩陣相乘,返回的還是乙個矩陣。return res 其實和普通快速冪類似,只不過這裡需要得到的是乙個矩陣下面來實現乙個矩陣快速冪 int pow int...