美文网首页算法
快速乘(俄罗斯农民乘法)

快速乘(俄罗斯农民乘法)

作者: 渔父歌 | 来源:发表于2020-06-09 21:28 被阅读0次

算法原理

先看看我们笔算乘法是怎么计算的:

   88
x  99
----------
  792
+792
----------
 8712

这个过程可以用公式表达为:

88 * 99 = 88 * 9 * 10^0 + 88 * 9 * 10^1
        = 792 + 7920
        = 8712

根据这个原理,我们把第二个乘数换成二进制:

88 * 0110 0011(2) = 88 * 0 * 2^7 
                  + 88 * 1 * 2^6 
                  + 88 * 1 * 2^5 
                  + 88 * 0 * 2^4 
                  + 88 * 0 * 2^3 
                  + 88 * 0 * 2^2 
                  + 88 * 1 * 2^1
                  + 88 * 1 * 2^0

算法用途

通常用在大数相乘取模的情况,可以防止大数相乘溢出。
当我们使用 int类型做快速乘运算时就相当于模2^32(假设 int类型是 4位)。

代码实现

int quickMulti(int A, int B) {
    int ans = 0;
    for ( ; B; B >>= 1) {
        if (B & 1) {
            ans += A;
        }
        A <<= 1;
    }
    return ans;
}

// 作者:LeetCode-Solution
// 链接:https://leetcode-cn.com/problems/qiu-12n-lcof/solution/qiu-12n-by-leetcode-solution/
// 来源:力扣(LeetCode)
// 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章

  • 面试题64 1+2+....+n.md

    递归 先写使用if的 然后使用&&的特性进行替换 快速乘 俄罗斯农民乘法

  • 快速乘(俄罗斯农民乘法)

    算法原理 先看看我们笔算乘法是怎么计算的: 这个过程可以用公式表达为: 根据这个原理,我们把第二个乘数换成二进制:...

  • 俄罗斯农民乘法

    也称为快速乘法 将被乘数除以2,乘数乘以2,如果被乘数除以2 有余数,则将乘数累加到结果中。 我们使用一个例子来逐...

  • 分治法 Divide and Conquer

    解决的最轻,最重,矩阵乘法,大整数乘法以及排序(快速排序,归并算法)。快速傅立叶变换,Karatsuba乘法算法 ...

  • (矩阵)快速幂

    快速乘法: 快速幂: 矩阵快速幂:

  • 2021-09-07,小数乘小数

    小数乘小数 小数乘法包括小数乘整数,小数乘小数。今天,教学小数乘小数。依然是从...

  • numpy和TensorFlow中矩阵乘法(点积,内积,数量积)

    在numpy中矩阵乘法与点乘 1.矩阵乘法np.dot(a,b)=a@b 其中矩阵a的列和b的行数相等2.点乘a*...

  • 教后反思

    乘加乘减是在学习了1-5的乘法口诀后学习的乘法和加减法的混合运算。本课内容编排的目的是帮助学生加深对乘法意义的理解...

  • 【少年梦.中国梦】

    数学课上我们学习了一到三的乘法口诀和乘法算式。有的小朋友乘法算式和乘法口诀就很容易混了。不过幸运的是我知道哪个是乘...

  • 分数乘法

    第一讲分数乘法的意义 1、分数乘整数与整数乘法的意义相同。都是求几个相同加数的和的简便运算。 整数乘分数的意义求一...

网友评论

    本文标题:快速乘(俄罗斯农民乘法)

    本文链接:https://www.haomeiwen.com/subject/nrwetktx.html