思路:
直接进行结论的推
sum=a+bsum = a + bsum=a+b
sum∗2=a∗2+b∗2sum * 2 = a * 2 + b * 2sum∗2=a∗2+b∗2
sum∗2−a∗2=b∗2sum * 2 - a * 2 = b * 2sum∗2−a∗2=b∗2
−a∗2≡b∗2(mod- a * 2 ≡ b * 2 (mod−a∗2≡b∗2(mod sum)sum)sum)
所以就是求a和b乘2的的k次幂的最小值
codecodecode
#include<iostream>
#include<cstdio>
#define ll long long
using namespace std;
ll t;
ll n, m, k;
ll p;
ll qpow(ll x, ll k) {
ll ans = 1;
for(; k; k >>= 1, x = x * x % p) if(k & 1) ans = ans * x % p;
return ans;
}
int main() {
scanf("%lld", &t);
while(t --) {
scanf("%lld%lld%lld", &n, &m, &k);
p = n + m;
printf("%lld\n", min(n * qpow(2, k) % p, m * qpow(2, k) % p));
}
return 0;
}