问题描述

  小艾是产自中国的一个移位寄存器,他最近很苦恼,他和他的同事吵架了,他们无法合作导致无法完成乘法操作,因为他自己只会通过移位完成乘2的乘法和除以2的除法,所以他无法完成复杂乘法。小艾的女朋友又比较笨,死活学不会乘法,小艾的女朋友不愿看他继续消沉下去,决定和小艾来一次说走就走的旅行,他们选择去俄罗斯看冰雪大世界,旅途中,小艾依然心不在焉,一位俄罗斯农民伯伯看出小艾有心事,便自动和小艾聊起了天,得知小艾是因为这点小事苦恼,农民伯伯说他有办法帮助小艾重回巅峰,小艾顿时来了精神,赶忙向农民伯伯请教。农民伯伯点起一支烟,眯着眼睛开始讲解……谁说完成乘法一定要复杂的操作,你和你女朋友就可以完成了,小艾存一个数n,你女朋友存一个数m,如果小艾存的是偶数,则小艾右移一位(除2),你女朋友左移一位(乘2),如果小艾存的是奇数,则小艾先减一再右移一位,将你女朋友保存的值传给累加器兄弟,然后你女朋友左移一位(乘2)。一直重复上述过程,直到小艾等于0。此时累加器中的值就是乘法的结果。

算法描述

举例

算法分析

  在整个计算的过程中都是乘以2和除以2的操作,这种操作在计算机中可以直接使用移位计算,效率非常高。因此,这个算法对计算机的整数计算是很有实际意义的!

算法用途

  1、用在大数相乘取模的情况,可以防止大数相乘溢出。

  2、当我们使用int类型做快速乘运算时就相当于模2^32(假设 int类型是 4位)。

代码实现

// C++
int russian_peasant_multiplication(int n, int m) {int ans = 0;// 保存乘法结果while (n > 0) {if (n & 1) {// 判断奇偶ans += m;}n >>= 1;// n除以2m <<= 1;// m乘以2}return ans;// 返回乘法结果
}

小艾和她女朋友(俄罗斯农民乘法)相关推荐

  1. 俄罗斯农民乘法 | 快速乘

    文章目录 概念 概念 俄罗斯农民乘法经常被用于两数相乘取模的场景,如果两数相乘已经超过数据范围,但取模后不会超过,我们就可以利用这个方法来拆位取模计算贡献,保证每次运算都在数据范围内. A 和 B 两 ...

  2. python socket能做什么_用python写一个聊天小程序!和女朋友的专属聊天工具!

    原标题:用python写一个聊天小程序!和女朋友的专属聊天工具! 1.UDP简介 Internet协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP).UDP为应用程序提供了无需建立就可 ...

  3. 3个月收获数十万用户,易车小程序“小艾懂车”的推广仍有发展空间

    相较于APP和服务号,小程序这种附着于微信生态的"轻APP"因其功能丰富.使用便捷和体验良好而受到众多网友的喜爱.随着迭代升级加速,小程序的功能越来越丰富,应用场景益发多样化,加上 ...

  4. registrar计算机词汇,小艾学英语——计算机英语常用词汇(12)

    原标题:小艾学英语--计算机英语常用词汇(12) 计算机英语常用词汇(计算机科学版) Q 队列Queue 快速排序算法Quick sort algorithm R Radio Shack(一种计算机) ...

  5. 盘点疯狂科学实验:小艾伯特

    照片上的小家伙叫做小艾伯特,当时他只有8个月零26天大.从拍照那天起,他开始收到来自美国约翰·霍普金斯大学教授送来的礼物--耷拉着耳朵的小狗用鼻子蹭着他的衣服,小猴子在他面前沿着绳子跳舞,小灰兔安静地 ...

  6. zzuli OJ 2332:小新同学找女朋友

    情况说明:18级新生周赛(1)题目 题目描述 小新同学刚进入大学,就幻想着每天都能和女朋友花前月下,现实是残酷的,女朋友还没有,小新就壮着胆子向心仪的女孩表白,女孩就问小新,家里有矿吗?答:没有,是A ...

  7. 【BZOJ4547】【HDU5171】小奇的集合,暴力+矩阵乘法

    Time:2016.08.18 Author:xiaoyimi 转载注明出处谢谢 传送门1 传送门2 思路: 基本想法是每次找出最大的两个相加即可 而且由于题目要求,起始的n个数中至少有一个是正整数 ...

  8. 《小艾上班记》—— 读后总结

    这本书好像是源自天涯的一个系列帖子,讲述了一个从刚刚毕业到在事务所 实习审计的过程. 主要内容包括了公司的成立.账务的分类等等. 其中涉及到了很多会计的专业名词,还是很难理解的,不过这本书通过一些小故 ...

  9. python用程序说爱你_用python写一个聊天小程序!和女朋友的专属聊天工具!

    1.UDP简介 Internet协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP).UDP为应用程序提供了无需建立就可以发送封装的IP数据包的方法. Internet的传输层有两个协议 ...

最新文章

  1. C++ 创建一个窗口
  2. Python引起的混乱解决之道——感悟
  3. 汇编语言标识符及其命名规则
  4. 阿里巴巴矢量图标库iconfont使用教程
  5. ABC181——F - Silver Woods
  6. 计算机语法分析,电子科技大学-计算机学院-编译原理实验-语法分析.pdf
  7. 日首相:对韩日问题深感遗憾 将采取强硬应对措施
  8. c语言字母表等腰三角,【原创】CS必修课——C语言基础编程实战26“C语言输出等腰三角形”...
  9. plsql怎么导出几十w的数据到csv_Greenplum数据库使用总结(干货满满)初级使用
  10. LibreOJ 6283 数列分块入门 7(区间加区间乘区间求和)
  11. visio画图复制粘贴到word_visio复制粘贴到word中
  12. imx6q LINUX 启动时间优化
  13. Wikidata知识图谱介绍与数据处理
  14. 【历史上的今天】12 月 10 日:世界上第一位程序员诞生;Ada 语言发布;第一人称射击游戏的开拓者
  15. 【Git】常用命令详解(循序渐进,逐步分析)
  16. Ripple(瑞波) JavaScript(node.js) 客户端接口库RippleAPI
  17. 16进制转字符串的简单实现
  18. R语言高分辨率遥感卫星数据处理
  19. Windows下编译Android安卓版QGroundcontrol
  20. Linux下应用程序列表

热门文章

  1. 关于CSS边框合并问题简述
  2. 人工智能动物识别系统C++ demo
  3. Python爬虫入门【4】:美空网未登录图片爬取
  4. 【OpenI开源项目推荐-GammaGL】支持国内外主流深度学习框架的图神经网络算法库
  5. 读书笔记:Markov链的状态分类之互达性
  6. 安装Ubuntu14.04教程
  7. Java读取ini文件
  8. 0x80070422报错、0x6D9报错,无法开启防火墙解决办法(方法版)
  9. php storm免费吗,Phpstorm
  10. 经典歌剧推荐:费加罗的婚礼