您的位置:首页 > 其它

51nod 1126 求递推序列的第N项(矩阵快速幂)

2016-11-06 18:23 239 查看
51nod 1126 求递推序列的第N项(矩阵快速幂)

注意:将给出数mod处理即可。

#include <bits/stdc++.h>
using namespace std;

struct Maxtri{
int p[2][2];
};

Maxtri multi(Maxtri a, Maxtri b)
{
Maxtri c;
memset(c.p,0,sizeof(c.p));
for(int i = 0; i < 2; i++)
for(int j = 0; j < 2; j++)
for(int k = 0; k < 2; k++)
c.p[i][j] = (c.p[i][j]+(a.p[i][k]*b.p[k][j]))%7;
return c;
}
Maxtri quick_mi(Maxtri a,int n)
{
Maxtri b;
for(int i = 0; i < 2; i++)
b.p[i][i] = 1;
while(n)
{
if(n&1) b = multi(b,a);
a = multi(a,a);
n >>= 1;
}
return b;
}
int main()
{
int n,a,b;
scanf("%d%d%d",&a,&b,&n);
Maxtri x,y,f,ans;
x.p[0][0] = (a%7+7)%7;
x.p[0][1] = (b%7+7)%7;
x.p[1][0] = 1;
x.p[1][1] = 0;
y = quick_mi(x,n-2);
f.p[0][0] = 1;
f.p[1][0] = 1;
f.p[0][1] = 0;
f.p[1][1] = 0;
ans = multi(y,f);
printf("%d\n",ans.p[0][0]);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: