考虑到使用 10base 进制,即压 base 位,那么加减运算的中间量不会超过 ±base 的范围,理论上可以取 base=18,不过乘法是不超过 base2(一步一取模常数太大)。
但是,最近注意到一个问题,如果使用 FFT 加速乘法,那本身就需要一个辅助数组,这样的 base 的值就与中间量大小没有直接联系,实测 FFT 可以压 4 位(5 位需要用更激进的方法优化精度,NTT 没有 FFT 快),那么为了方便可以取 base=16。
但是,这样的话终究是多了一个进制转化,乘法常数大一点点,实际使用中这样搞是否优于全程取 base=4 呢?
FFT 速度参考数据:
我写的大整数乘法效率
通过板题大约 260ms 的优秀版本
非常快且长的指令集版本(不过用的 FHT)