#include<cstdio>
#include<cstring>
typedef long long LL;
using namespace std;
struct matrix{
LL d[3][3];
};
matrix cal(matrix a,matrix b){
matrix c;
for(int i=0;i<2;i++)
for(int j=0;j<2;j++){
c.d[i][j]=0;
for(int k=0;k<2;k++)
c.d[i][j]+=a.d[i][k]*b.d[k][j];
}
return c;
}
matrix qcal(matrix a,int n){
matrix c;
c.d[1][1]=c.d[0][0]=1;
c.d[0][1]=c.d[1][0]=0;
if(n==0) return c;
if(n==1) return a;
while(n){
if(n&1)
c=cal(c,a);
n>>=1;
a=cal(a,a);
}
return c;
}
int main(){
LL p,q,n;
while(scanf("%lld%lld%lld",&p,&q,&n)==3){
if(n==0){
printf("2\n");
continue;
}
if(n==1){
printf("%lld\n",p);
continue;
}
matrix t;
t.d[0][0]=p,t.d[0][1]=-q,t.d[1][0]=1,t.d[1][1]=0;
matrix res=qcal(t,n-1);
printf("%lld\n",res.d[0][0]*p+2*res.d[0][1]);
}
}
uva 10655 公式变形 矩阵快速幂
最新推荐文章于 2022-04-05 20:06:14 发布