给 a,b
,每次 a,b 会变为 a+b,a−b ,问 k 次之后变成了哪两个数,对 998244353
取模,多组数据。
Input
第一行一个正整数 T(1≤T≤100000)
,代表测试组数。
接下来 T 行每行三个数 a,b,k(0≤a,b<998244353,0≤k≤109)
。
Output
T
行每行两个整数,代表每一组数据 a,b
最后变成了什么。
Sample Input
2 2 1 5 5 5 100
Sample Output
12 4 329904920 329904920
#include<bits/stdc++.h>
using namespace std;
int mod=998244353;
long long quickpow(long long x)
{
long long s=1,n=2;
while(x)
{
if(x%2)
s=s*n%mod;
n=n*n%mod;
x/=2;
}
return s;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
long long a,b,k,c;
scanf("%lld %lld %lld",&a,&b,&k);
long long s,s1,ans,ans1;
s=((quickpow(k/2)%mod)*a%mod)%mod;
s1=((quickpow(k/2)%mod)*b%mod)%mod;
ans=(s%mod+s1%mod+mod)%mod;
ans1=((s-s1)%mod+mod)%mod;
if(k%2)
printf("%lld %lld\n",ans,ans1);
else
printf("%lld %lld\n",s,s1);
}
return 0;
}