俄罗斯农夫算法

来源:互联网 发布:淘宝双11销售排行榜 编辑:程序博客网 时间:2024/06/11 10:10

今天看到了一个十分有趣的算法,据说是俄罗斯的农夫发明的。特别适合在计算机里面算整数乘法。总结一下和大家分享。

  我们来看简单的等式 

m * n = (m /2 )* (2 * n)  (如果m是偶数)

              m * n = ((m -1)/2 )* (2 * n) + n (如果m是奇数)

   利用这两个很简单的等式,即使你不会 九九乘法表也可以很简单的算出很大的数想乘的结果。

  我们来看看运算步骤如下表

 比如我们要计算 86 * 39

 m

n 

 

 86

39

 

43

78

 

21

156

+78

10

312

+156

5

624

 

2

1248

+624

1

2496

 

  那么结果就是 2496 + 78 + 156 + 624 = 3354

 

分析: 在计算机中除2与乘2的操作是很快的,用位运算就可以了,而且对于很大的数来讲,这种方法也是可行的,因为对这种算法讲,m是以指数下降的,即使一个32位才能表示的整数也只要移位31次就可以为1,在机器层面讲,乘法是比移位慢的多的操作。

因此,这个算法对整数计算是很有实际意义的!

原创粉丝点击