快速乘法算法原理及实现

快速乘法

基本原理

 由于计算机底层设计的原因,做加法往往比乘法快的多,因此将乘法转换为加法计算将会大大提高(大数,比较小的数也没必要)乘法运算的速度,除此之外,当我们计算a*b%mod的时候,往往较大的数计算a*b会超出long long int的范围,这个时候使用快速乘法方法也能解决上述问题.
  快速乘法的原理就是利用乘法分配率来将a*b转化为多个式子相加的形式求解(注意这时使用乘法分配率的时候后面的一个乘数转化为二进制的形式计算).举个栗子
  20*14 = 20*(1110)2 = 20*(2^3)*1 + 20*(2^2)*1+20*(2^1)*1+20*(2^0)*0 = 160+80+40=280.
  上面即为快速乘法的基本原理

代码实现

long long quick_multiply(long long a, long long b, long long mod) {
    long long result = 0;
    while (b) {
        result = (result + (b % 2 * a) % mod) % mod;
        a = a * 2 % mod;
        b = b / 2;
    }
}

你可能感兴趣的:(ACM算法)