題意:現在定義fib數列為 an = p * an-1 + q * an-2求第n項%m的答案。
題解:
\begin p & 1\\ q & 0 \end *
\begin f(n-1)& f(n-2) \end =
\begin p*f(n-1) + q*f(n-2)& f(n-1) \end=
\begin f(n)& f(n-1) \end
這題有個玄學mod。矩陣乘法的時候記得要多mod一次。
**:
1 #include2 #include3 #include4using
namespace
std;
5#define ll long long
6const
int maxn = 3;7
8ll n,mod;910
//矩陣結構體
11struct
matrix18}
19};
2021
//矩陣乘法
22matrix mul(matrix a, matrix b)31}
32}
33return
ans;34}
3536
//矩陣快速冪
37matrix qpow(matrix a,ll b)
46return
ans;47}
4849
void
print(matrix a)
54 cout <56}
5758
intmain()
65if(n == 2
)69 matrix base;70
matrix ans;
71 ans.a[1][1] = a2;ans.a[1][2] =a1;
7273
base.a[1][1] = p;base.a[1][2] = 1;74
base.a[2][1] = q;base.a[2][2] = 0;75
76 ans = mul(ans,qpow(base,n-2
));77
//print(ans);
78 cout<1][1]%mod<79return0;
80 }
P1349 廣義斐波那契數列
題目描述 廣義的斐波那契數列是指形如an p an 1 q an 2的數列。今給定數列的兩係數p和q,以及數列的最前兩項a1和a2,另給出兩個整數n和m,試求數列的第n項an除以m的餘數。輸入輸出格式 輸入格式 輸入包含一行6個整數。依次是p,q,a1,a2,n,m,其中在p,q,a1,a2整數範圍...
洛谷1349 廣義斐波那契數列
廣義的斐波那契數列是指形如an p an 1 q an 2的數列。今給定數列的兩係數p和q,以及數列的最前兩項a1和a2,另給出兩個整數n和m,試求數列的第n項an除以m的餘數。輸入包含一行6個整數。依次是p,q,a1,a2,n,m,其中在p,q,a1,a2整數範圍內,n和m在長整數範圍內。輸出包含...
洛谷1349 廣義斐波那契數列 矩陣乘法
洛谷1349 廣義斐波那契數列 題目描述 廣義的斐波那契數列是指形如an p an 1 q an 2的數列。今給定數列的兩係數p和q,以及數列的最前兩項a1和a2,另給出兩個整數n和m,試求數列的第n項an除以m的餘數。輸入輸出格式 輸入格式 輸入包含一行6個整數。依次是p,q,a1,a2,n,m,...