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