HDU 4549 M斐波那契數列(矩陣快速冪)

2022-05-08 15:21:11 字數 1211 閱讀 8021

m斐波那契數列

題意:$f[0]=a,f[1]=b,f[n]=f[n-1]*f[n-2]$。給定$a,b,n$,求$f[n]$。

題解:暴力打表後發現$ f[n]=a^ * b^ $

斐波那契數列可用矩陣快速冪求解。但是此題中n較大,fib會爆掉。這時候需要引入費馬小定理優化。

證明:$a^x \% p = a^ \%p$

1. $a^x \% p = a^ \% p$

2. $a^x \% p = a^ * a^ \%p$

3. $a^ \% p= (}) ^ \%p = 1^ $

把3式帶入2式,即可證明。

1 #include 2 #include 3 #include 4 #include 5

#define n 2

6using

namespace

std;

78 typedef long

long

ll;9

const ll mod=1000000007;10

11struct

mat12

,16

17};

18};

1920

mat mul(mat a,mat b,ll p)

2134

35ll matpow(ll n,ll p)

3652

return ans.m[0][0]%p;53}

5455

ll fast_mod(ll a,ll b,ll p)

62return

res;63}

6465

intmain()

73else

if(n==1)77

else

if(a==0||b==0

)81 ll m1=matpow(n-1,mod-1

);82 ll m2=matpow(n,mod-1

);83 ll ans=(fast_mod(a,m1,mod)*fast_mod(b,m2,mod))%mod;

84 printf("

%lld\n

",ans%mod);85}

8687

return0;

88 }

view code

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