一、算法目的
下面引入以下情景:
计算:
很显然,计算在指数b非常庞大的时候,会进行非常复杂的运算。常规的运算方法要算b个a相乘。
我们要想个办法,怎么样不用算这么多次就计算出结果。
二、思想和原理
在C语言中,有一种运算为“a*=a”(含义:a=a*a),即自乘。我们看看进行一次自乘运算,会发生什么。
计算第一次:a*=a,结果为a^2;
计算第二次:a*=a,结果为a^4;
很显然,自乘运算,会让a以2的n次方的速度增长下去。
那么,在以2的n次方的速度增长的前提下,它,与二进制联系在了一起。
我们已知,一个数可以以一种“进制展开”的形式表达:
如19:在十进制下展开:19=1x10^1+9x10^0
同样,它可以在二进制下展开:19(10)=1x2^4+0x2^3+0^2^2+1x2^1+1x2^0
因此,一个正整数可以以二进制表达。
此时,便可以将我们的指数b,以二进制表达&