(1)取模很耗时间,尽量减少取模次数,比如类似分治思想,运用结合律分步计算。例如
a⋅bmod M⋅cmod M⋅dmod M=(a⋅bmod M)(c⋅dmod M)mod Ma·b\mod M·c\mod M·d\mod M=(a·b\mod M)(c·d\mod M)\mod Ma⋅bmodM⋅cmodM⋅dmodM=(a⋅bmodM)(c⋅dmodM)modM
(2)重复计算的部分开数组保留下来。
(3)试着将c++14换成c++20?运用第(1)(2)条后,c++14跑了3600ms,c++20只跑了1000多ms。震惊。