【2022年10月27日A组】分肉【数学】

博客主要围绕算法思路展开,直接进行结论推导,通过一系列等式变换,如sum=a+b,sum*2=a*2+b*2等,得出 -a*2≡b*2(mod sum),最终目标是求a和b乘2的k次幂的最小值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

思路:

直接进行结论的推
sum=a+bsum = a + bsum=a+b
sum∗2=a∗2+b∗2sum * 2 = a * 2 + b * 2sum2=a2+b2
sum∗2−a∗2=b∗2sum * 2 - a * 2 = b * 2sum2a2=b2
−a∗2≡b∗2(mod- a * 2 ≡ b * 2 (moda2b2(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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值