藍橋杯 斐波那契(快速矩陣冪)

2021-08-16 04:18:31 字數 1277 閱讀 6420

歷屆試題  斐波那契    

時間限制: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...