经常会有些恶心人的题把模数开到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 mod mox*y~mod~mox∗y

当遇到模数非常大的题目时,传统的long long乘法无法存储结果。本文介绍了两种简便方法:一种类似快速幂的快速加法,另一种是利用long double计算误差极小的近似值,然后进行调整。这两种方法可以避免编写复杂的小高精度代码,适用于大模数计算。
最低0.47元/天 解锁文章
663

被折叠的 条评论
为什么被折叠?



