矩陣有乙個神奇的作用,它可以用來快速求遞推式的第\(n\)項,學會這個技
能,你需要掌握這兩個前置芝士 矩陣快速冪,
矩陣加速(數列)
具體怎麼優化呢? 這個部落格已經總結的較為全面,在這裡我就不再加贅述。
貼一發我寫的模板
#include#include#include#include#define int long long
#define mod 1000000007
using namespace std;
const int maxn=1e2+10;
int n,k;
inline int read()
while(ch<='9'&ch>='0')
return f*ret;
}struct mat
inline void build()
} mat operator *(const mat &b)
void init()
} void out()
return ans;
}signed main()
#include#include#include#include#define int long long
#define mod 1000000007
using namespace std;
const int maxn=1e2+10;
inline int read()
while(ch<='9'&ch>='0')
return f*ret;
}struct mat
void build()
} mat operator *(const mat &b1)
void out()
return ans;
}mat mul(mat x,mat y)
} }return ans;
}signed main()
sort(b+1,b+1+n,cmp);
mat st;
st.a[1][1]=1;
st.a[1][2]=1;
st.a[2][3]=1;
st.a[3][1]=1;
mat ans;
ans.a[1][1]=1;
ans.a[1][2]=1;
ans.a[1][3]=1;
int fla=0;
for(int i=1;i<=n;i++)
if(fla==0)
ans=mul(ans,pow(st,q[b[i]]-q[b[i-1]]));
an[b[i]]=ans.a[1][1];
} for(int i=1;i<=n;i++){
cout《最後推薦一道練習題 p1306 斐波那契公約數
矩陣加速 矩陣 快速冪
矩陣的快速冪是用來高效地計算矩陣的高次方的。將樸素的o n 的時間複雜度,降到log n 這裡先對原理 主要運用了矩陣乘法的結合律 做下簡單形象的介紹 一般乙個矩陣的n次方,我們會通過連乘n 1次來得到它的n次冪。但做下簡單的改進就能減少連乘的次數,方法如下 把n個矩陣進行兩兩分組,比如 a a a...
快速冪,矩陣乘法,矩陣快速冪
快速冪利用二進位制 複雜度 log級 include include include include using namespace std typedef long long ll typedef unsigned long long ull int q power int a,int b,int...
矩陣快速冪 矩陣構造
fibonacci數列 f 0 1 f 1 1 f n f n 1 f n 2 我們以前快速求fibonacci數列第n項的方法是 構造常係數矩陣 一 fibonacci數列f n f n 1 f n 2 f 1 f 2 1的第n項快速求法 不考慮高精度 解法 考慮1 2的矩陣 f n 2 f n ...