乘法取大模数技巧(黑科技)

当遇到模数非常大的题目时,传统的long long乘法无法存储结果。本文介绍了两种简便方法:一种类似快速幂的快速加法,另一种是利用long double计算误差极小的近似值,然后进行调整。这两种方法可以避免编写复杂的小高精度代码,适用于大模数计算。
摘要由CSDN通过智能技术生成

经常会有些恶心人的题把模数开到10^18那么大来恶心人。

此时如果直接相乘long long肯定是存不下的,打个小高精度代码又有些繁琐且容易写错,在这里提供两种便捷的办法。

###第一种:
快速加,众人皆知,原理与快速幂类似,打法也十分类似。

Code:

ll ksj(ll x, ll y) {
	ll s = 0;
	for(; y; y /= 2, x = x * 2 % mo)
		if(y & 1) s = (s + x) % mo;
	return s;
}

###第二种:
这是我从《算法竞赛进阶指南》里看的的做法。

InFleaKing说这个东西经过了对拍的考验。

原理是这样的:

x ∗ y   m o d   m o x*y~mod~mo xy 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值