HDUOJ 4549 M斐波那契數列

2021-10-04 04:35:02 字數 1369 閱讀 3299

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

f[0] = a

f[1] = b

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

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

輸入包含多組測試資料;

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

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

0 1 0

6 10 2

0

60

簡單推導一下:

f 0=

af1=

bf_0=a f_1=b

f0​=af

1​=b

f 2=

abf3

=ab2

f_2=ab f_3=ab^2

f2​=ab

f3​=

ab2f2=

a2b3

f3=a

3b

5f_2=a^2b^3 f_3=a^3b^5

f2​=a2

b3f3

​=a3

b5⋮

⋮\vdots \vdots

⋮⋮不難發現,a,b的指數都是斐波那契數列,但這裡要注意,因為指數非常大,所以要用到費馬小定理:ap%

mod=

ap%(

mod−

1)

a^p \% mod=a^

ap%mod

=ap%

(mod

−1),ac**如下:

#include

using

namespace std;

typedef

long

long ll;

const ll mod=

1e9+7;

ll n,a,b;

struct mat

ans;

void

init

(mat &a)

mat mul

(mat a,mat b)}}

return c;

}mat mat_pow

(mat a,ll k)

return b;

}ll power

(ll a,ll b)

ll f

(ll a,ll b)

//快速乘

return k;

}int

main()

}}

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...

hdu4549 M斐波那契數列

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 對每組測試資料請輸出乙個整...

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...