快速乘

对于会溢出的乘法,除了__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

posted @ 2020-05-03 12:54  nebulyu  阅读(167)  评论(0编辑  收藏  举报