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 5view code#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 }
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...