HDU 4549 M斐波那契數列

2021-08-22 18:11:19 字數 785 閱讀 3969

先用矩陣快速冪計算出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#includeusing namespace std;

typedef long long ll;

const ll mod=1e9+7;

const int n=2;

struct node

;node shu,ans,mp;

//shu是輸入的矩陣,ans是所求答案

node matrix(node x,node y)

return mp;

}void work(ll k)

}ll expow(ll a,ll k)

return ret;

}int main()

if(n==1)

ll ret;

memset(shu.a,0,sizeof(shu.a));

shu.a[1][1]=shu.a[1][2]=1;

shu.a[2][1]=1;

work(n-1);

ret=(expow(b,ans.a[1][1])*expow(a,ans.a[1][2]))%mod;

printf("%lld\n",ret);

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

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