HDU 4549 M斐波那契數列

2021-06-26 16:25:33 字數 1071 閱讀 5776

解題思路:他和普通的斐波那契數列相似,但是是乘法,所以還要變形下,我們寫幾個式子就會發現一些規律

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 p)這裡p是整數,所以對於mod p來說  a^(p - 1 + n) ≡

a^n (mod p),也就是冪對於p-1取模。冪算出來後分別帶到a,b中快速冪,最後取個餘數就好了,對於n < 2 的就直接輸出就好了。

#include#include#include#define mod 1000000007

#define maxn 2

#define maxm 2

#define ll __int64

using namespace std;

struct matrix

matrix operator *(const matrix &b) const}}

return tem;

}void display()

cout << endl;}}

};ll a, b, n, x, y;

matrix ans, q;

void quick_matrix(int x)

}q.a[1][1] = 0;

while(x)

q = q * q;

x >>= 1;

}}ll calc(ll x, ll y)

q = q * q % mod;

y >>= 1;

}return ret % mod;

}int main()

if(n ==1)

if(n == 2)

else if(n == 3)

else

cout << (calc(a, x) * calc(b, y)) % mod << endl;

}return 0;

}

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

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