線性遞推公式找遞推矩陣的方法:
構造方法:規定由遞推矩陣a,左乘由項構成的矩陣f,其中矩陣a的第一列為對應係數,左下角為單位矩陣,右下角為零矩陣。
對於遞推式的常數c,在矩陣f中增加最後一行c,在a的最右列增加兩個1(通常選右上角和左下角)。
對於遞推式的c的n次方,在矩陣f中增加最後一行c的n次方,在a的最右列增加兩個c(通常選右上角和左下角)。
以斐波那契數列為例,這裡使用了快速乘進一步防止溢位。
#includeusingnamespace
std;
#define ll long long
#define maxn 2ll mod=1000000007;//
快速乘 a*b%p 防止乘法溢位ll
ll qmut(ll a,ll b)
return
res;
}class
matrix
//對陣列的初始化
void
init(ll num[maxn][maxn]) }}
matrix
operator*(matrix &m1)
}return
t; }
matrix qpow(ll n)
return
t; }
void
show()
cout
<
}cout
<
}};int
main()
ll num[maxn][maxn];
matrix a;
memset(num,
0,sizeof
(num));
num[
0][1]=num[1][0]=num[1][1]=1
; a.init(num);
//初始化a矩陣
matrix ini;
memset(num,
0,sizeof
(num));
num[
0][0]=1
; num[
1][0]=1
; ini.init(num);
matrix an=a.qpow(n-2); //
求出矩陣的快速冪
matrix res=an*ini;
cout
<1][0]<
}
#includeusing帶n的次方的矩陣快速冪,找出相鄰兩項的關係就可以,用楊輝三角就可以了。namespace
std;
#define ll long long
#define maxn 4ll mod=1000000007;//
快速乘 a*b%p 防止乘法溢位ll
ll qmut(ll a,ll b)
return
res;
}class
matrix
//對陣列的初始化
void
init(ll num[maxn][maxn]) }}
matrix
operator*(matrix &m1)
}return
t; }
matrix qpow(ll n)
return
t; }
void
show()
cout
<
}cout
<
}};int
main()
ll num[maxn][maxn];
matrix a;
memset(num,
0,sizeof
(num));
num[
0][1]=num[1][2]=num[2][3]=num[3][1]=num[3][3]=1
; a.init(num);
//初始化a矩陣
matrix ini;
memset(num,
0,sizeof
(num));
num[
0][0]=1
; num[
1][0]=1
; num[
2][0]=1
; num[
3][0]=2
; ini.init(num);
matrix an=a.qpow(n-4); //
求出矩陣的快速冪
matrix res=an*ini;
printf(
"%d\n
",res.m[3][0
]); }}}
#includeusingnamespace
std;
#define ll long long
#define maxn 8ll mod=2147493647
;class
matrix
//對陣列的初始化
void
init(ll num[maxn][maxn]) }}
matrix
operator*(matrix &m1)
}return
t; }
matrix qpow(ll n)
return
t; }
void
show()
cout
<
}cout
<
}};int
main()
else
if(n==2
) else
}num[
6][7]=1
; num[
7][5]=3
; num[
7][6]=3
; num[
7][7]=2
; a.init(num);
//初始化a矩陣
matrix ini;
memset(num,
0,sizeof
(num));
num[
0][0]=1
; num[
1][0]=3
; num[
2][0]=9
; num[
3][0]=27
; num[
4][0]=81
; num[
5][0]=243
; num[
6][0]=a;
num[
7][0]=b;
ini.init(num);
matrix an=a.qpow(n-2); //
求出矩陣的快速冪
matrix res=an*ini;
printf("
%lld\n
",res.m[7][0
]); }}}
}
數學 快速冪與矩陣快速冪
二進位製取冪的想法是,我們將取冪的任務按照指數的 二進位制表示 來分割成更小的任務 快速冪的遞迴版本 long long fastpower long long a,long long b while迴圈版本 相對於原來的遞迴版本更快 解決你的tle long long fastpower long...
數學 快速冪與矩陣快速冪
1.a sequence of numbers 題目 題解 這是一道隱藏的快速冪的模板題,從資料我們就可以知道。對該題進行分析,如何判別是等差or等比,通過比較a 2 a 1 a 3 a 2 如果相等,則為等差 否則a 2 a 1 a 3 a 2 就為等比,然後利用快速冪來解決等比。includeu...
矩陣快速冪模板
剛學了矩陣快速冪,花了點時間把之前的 修改一下寫成了矩陣類,就當做模板了.話不多說下面貼 首先是標頭檔案和巨集定義什麼的 include include include using namespace std define inf 1000000000 define maxm 20 define m...