hdu4549 M斐波那契數列

2021-08-06 06:39:39 字數 1282 閱讀 1856

m斐波那契數列f[n]是一種整數數列,它的定義如下:

f[0] = a

f[1] = b

f[n] = f[n - 1] * f[n - 2](n > 1)

現在給出a, b, n,你能求出f[n]的值嗎?

input

輸入包含多組測試資料;

每組資料佔一行,包含3個整數a, b, n( 0 <= a, b, n <= 10 ^ 9 )

output

對每組測試資料請輸出乙個整數f[n],由於f[n]可能很大,你只需輸出f[n]對1000000007取模後的值即可,每組資料輸出一行。

sample input

0 1 0

6 10 2

sample output

0 60

f(n)=a^fib(n-1)*b^fib(n)

費馬小定理

假如a是整數,p是質數,且a,p互質(即兩者只有乙個公約數1),那麼a的(p-1)次方除以p的餘數恆等於1。

本題a^b %mod,這裡c是質數,並且a,mod互質,有a^(b%(mod-1)) %c。

故矩陣相乘中對結果矩陣%(mod-1)

矩陣快速冪

fib(n)用矩陣快速冪求得

while(n)

res為單位矩陣[1 0 0 1]

#include#define ll long long

#define mod 1000000007

struct matrix;

matrix mat

;matrix

unit;

//矩陣相乘

matrix matrix_mul(matrix a, matrix b)

c.mat[i][j] %= (mod-1);//mod-1????}}

return c;

}//a^b b=mat^n ; f(n)=a^fib(n-1)*b^fib(n) ; fib可用快速冪 即fib_quickpow

matrix fib_quickpow(ll n)

return ret;//次數

}ll quickpow(ll a,ll b)

return ret;//a^b %mod結果

}int main()

return

0;}

HDU 4549 M斐波那契數列

解題思路 他和普通的斐波那契數列相似,但是是乘法,所以還要變形下,我們寫幾個式子就會發現一些規律 f 2 a 1 b 1 f 3 a 1 b 2 f 4 a 2 b 3 f 5 a 3 b 5 我們發現這裡a和b的冪是斐波那契數列,所以我們可以用矩陣快速冪來算,這裡要用到費馬小定理a p a mod...

HDU 4549 M斐波那契數列

先用矩陣快速冪計算出f n 含有a的個數和b的個數,再用快速冪算出答案 wa後才發現a b c並不等於a b c c 費馬小定理 c為質數且a,c互質,a b c a b c 1 c 那麼求冪次時mod 1就可以了 include include include include includeusi...

hdu4549 M斐波那契數列

題意 f 0 a f 1 b,f n f n 1 f n 2 n 1 現在給出a,b,n,你能求出f n 的值 想到點子上就很簡單了,可當時做的時候都沒有向找遞推式的方向去思考 1.找f n 的遞推式 附 斐波那契數矩陣公式 fn 1 fn 1 1 的n次方 fn fn 1 1 0 include ...