Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:矩阵快速幂In Reply To:矩阵快速幂 Posted by:when at 2016-10-09 08:58:10 > #include <iostream> > using namespace std; > > const int num = 2; > const int mod = 10000; > > struct mat { > int m[num][num]; > }; > > mat I{ > 1,0, > 0,1 > }; > > mat mul(mat a, mat b) { > mat ans; > for(int i=0;i<num;i++) > for (int j = 0; j < num; j++) { > ans.m[i][j] = 0; > for (int k = 0; k < num; k++) > ans.m[i][j] += (a.m[i][k] * b.m[k][j]); > ans.m[i][j] %= mod; > } > return ans; > } > > mat quick_pow(mat a, long long b) { > mat ans = I; > mat tmp = a; > while (b > 0) { > if (b & 1) > ans = mul(ans, tmp); > tmp = mul(tmp, tmp); > b >>= 1; > } > return ans; > } > > int main() { > long long n; > mat a{ > 1,1, > 1,0 > }; > while (cin >> n&&n!=-1) { > mat tmp; > tmp = quick_pow(a, n); > cout << tmp.m[0][1] << endl; > } > return 0; > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator