首页 > 其他 > 详细

快速乘

时间:2020-05-03 13:18:43      阅读:43      评论:0      收藏:0      [点我收藏+]

对于会溢出的乘法,除了__int128之外还有几个方法

1.类似于快速幂的思想,只不过把加法换成乘法,

快速幂:\(res=\Pi p^i*[a_i==1]\),将连乘改成连加

快速乘:\(res=\Sigma p^i*[a_i==1]\),时间复杂度O(log)

2.利用long double来在过程中替代long long

再在接下来的计算中强制转换类型

ll temp=(ld)x/MOD*y;
ll res=(ull)x*y-(ull)z*MOD;

注意,这个x/MOD*y的顺序很重要,保证不会溢出

上面的式子实际上就是余数的定义式

3.分配律

\((a+b)*(c+d)\equiv(ac+bd+ad+bc)(modp)\)

合理的拆分可在O(1)时间内算出解,但是应用范围较局限

可以考虑类似辛普森积分的方法递归拆分,但是还不如上面的优秀

最好用的还是__int128了,只是编译环境不统一可能是个大坑

? ——2020.5.3

快速乘

原文:https://www.cnblogs.com/nebulyu/p/12821542.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!