64位整数乘法

题目描述

求对取模的值

问题分析

先不考虑

方法一

类似于快速幂的思想,

因此:

也就是说如果的第位是,那么就等于;如果是,那么就等于

又有,而(表示向上取整),故时间复杂度为

所以每次取中的位(),每次都乘(),如果的这一位是就累加到中。

方法二

利用(其中表示向下取整)

记为,为

问题有个,一是如何计算出,而是如何计算

因为在十进制下的有效数字有~位,当时也一定小于。所以可以胜任,再把结果强制转换为即可。由此计算。

因为其实就是,所以,又因为溢出时相当于对自动取模,所以由此计算。

时间复杂度为