快速乘

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