数学题型取模mod需注意的问题 ( Codeforces Round #553 (Div. 2) C - Problem for Nazar)

1 、取模(%mod) 运算的优先级与 * / 一样 , 故 在进行乘除%混合运算时注意运算次序从左往右就行
2、应用于对负数ans求模 ans =(ans + mod) %mod;
可以在输出答案时添上+mod防止负数的产生,并且对答案无影响(数论上可证明)

点我进入CodeForces测试题
点我进入计蒜客测试题


ll getsum(ll x)
{
	ll ret = 0;
	ll len = 1;
	ll st1 = 1, st2 = 2;
	bool oae = 1;
	while(x > 0)
	{
		if(x <= len) len = x;
		if(oae){
			ret += (st1	+ (len -1)%mod)%mod*(len%mod)%mod;  
			st1 += ((len%mod) << 1);
			st1 %= mod;
		}
		else{
			ret += (st2	+ (len -1)%mod)%mod*(len%mod)%mod;  
			st2 += ((len%mod) << 1);
			st2 %= mod;
		}
		ret %= mod;
		oae ^= 1;
		x -= len;
		len <<= 1;	
	}
	return ret;
}

int main(void)
{
	io
	ll l,r;
	while(cin >> l >> r)
	{
		ll sumr = getsum(r), suml = getsum(l-1);
		cout << (sumr - suml + mod)%mod << endl;
	}
	int main(void)
	{
		ll x1, y1, x2, y2;
		cin >> x1 >> x2 >> y1 >> y2;
		ll width = y2 - y1 + 1;
		ll height = x2 - x1 + 1;
		ll st = x1 + y1 - 1;
		ll ed = x1 + y2 - 1;
		ll line_val = (st + ed)%mod*(width%mod)/2%mod;	
		ll ans = line_val%mod*(height%mod)%mod 
		+ width%mod*(height%mod)%mod*((height - 1)%mod)/2;
		ans %= mod;
		cout << (ans<<1)%mod << endl;
	}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值