HDU 4549 M斐波那契數列

2022-07-07 08:45:11 字數 1495 閱讀 3625

hdu 4549 m斐波那契數列

題目大意:

題解:

先找規律:

\(f_0=a,\)

\(f_1=b,\)

\(f_2=a\times b,\)

\(f_3=a\times b^2,\)

\(f_4=a^2\times b^3,\)

\(f_5=a^3\times b^5,\)

\(...\)

\(f_n=a^}\times b^\)(\(f_n\)為斐波那契數列)

所以題目就變成了用矩陣快速冪求斐波那契數列。

構造矩陣:

\[\left(\begin

f_i \\

f_\end\right)

=\left(\begin

1 & 1 \\

1 & 0

\end\right)

\times

\left(\begin

f_ \\

f_\end\right)

\]所以:

\[\left(\begin

f_n \\

f_\end\right)

=\left(\begin

1 & 1 \\

1 & 0

\end\right)^

\times

\left(\begin

1 \\

0\end\right)

\]因為結果需要對\(1e9+7\)取餘,由費馬小定理可知\(a^\equiv 1(\mod p)\),

由此可得:

\[ans=(a^}\%mod\times b^\%mod)\%mod

\]\[=((a^\%(mod-1)}\times a^\div (mod-1)]}})\%mod+(b^\times b^})\%mod)\%mod

\]\[=(a^\%(mod-1)}\%mod+b^\%mod)\%mod

\]所以在矩陣快速冪中對\(1e9+6\)取餘,在快速冪中對\(1e9+7\)取餘。

#include #include #include using namespace std;

#define ll long long

const int mod = 1e9 + 7;

struct matrix ;

matrix multiply(matrix a, matrix b)

matrix matrixfastpow(matrix base, ll k)

return ans;

}ll fastpow(ll n, ll k)

return ans;

}int main() else

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

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