水题,不多说
#include<stdio.h>
#include<string.h>
long long N;
#define M 2
struct node
{
long long a[M][M];
};
node cheng(node a,node b)
{
node c;
memset(c.a,0,sizeof(c.a));
for(int i=0;i<M;i++){
for(int j=0;j<M;j++)
for(int k=0;k<M;k++)
c.a[i][j]=(c.a[i][j]+(a.a[i][k]*b.a[k][j])%N)%N;
}
return c;
}
const node A={
{
1,1,
1,0
}
};
int main()
{
int t,a,b,n,m;
node x,y;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d%d",&a,&b,&n,&m);
N=1;
for(int i=1;i<=m;i++)
N*=10;
x.a[0][0]=b;
x.a[0][1]=a;
x.a[1][0]=x.a[1][1]=0;
y=A;
n--;
while(n)
{
if(n&1) x=cheng(x,y);
y=cheng(y,y);
n>>=1;
}
printf("%lld\n",(x.a[0][0]%N+N)%N);
}
return 0;
}