给 a,ba,b ,每次 a,ba,b 会变为 a+b,a−ba+b,a−b ,问 kk 次之后变成了哪两个数,对 998244353998244353 取模,多组数据。
Input
第一行一个正整数 T(1≤T≤100000)T(1≤T≤100000) ,代表测试组数。
接下来 TT 行每行三个数 a,b,k(0≤a,b<998244353,0≤k≤109)a,b,k(0≤a,b<998244353,0≤k≤109) 。
Output
TT 行每行两个整数,代表每一组数据 a,ba,b 最后变成了什么。
Sample Input
2 2 1 5 5 5 100
Sample Output
12 4 329904920 329904920
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
const int mod=998244353;
long long kpow(long long m,long long n)
{
long long r=1;
while(n)
{
if(n%2) r=r*m%mod;
m=m*m%mod;
n/=2;
}
return r;
}
int main()
{
long long n,m,j,i,k,a,w,b,a1,b1;
scanf("%lld",&w);
while(w--)
{
scanf("%lld%lld%lld",&a,&b,&k);
n=(k+1)/2-1;
if(k%2)
{
a1=kpow(2,n)*(a+b)%mod;
b1=kpow(2,n)*(a-b+mod)%mod;/*负数求模*/
}
else
{
a1=2*kpow(2,n)*a%mod;
b1=2*kpow(2,n)*b%mod;
}
printf("%lld %lld\n",a1,b1);
}
return 0;
}