** 1.快速幂的算法**
(1)当我们求一个数的n次方的的结果时,若直接选择for循环,来累乘的话,效率很低,时间复杂度位O(n),而当我们选择快速幂来计 算时,时间复杂度能达到O(logn),快了很多。快速幂的基本方法基于二进制,将n次方分解,每次计算平方。如下:
假设我们要求5^23(5的23次方),因为23换为二进制为:10111。即2^4*1+2^3*0+2^2*1+2^1*1+2^0*1,那么5^23次方就可以转换,为:5^(2^4*1)*5^(2^3*0)*5^(2^2*1)*5^(2^1*1)*5^(2^0*1)。基于这个公式,我们计算5^23次方就只需要5步就算出来了,原来则需要计算23次。效率提高不少,特别是当n为很大的时候,效率更高。那么,现在有个问题,怎么算这五步呢?思路如下:
1.观察这五个等式,从高到低依次为5^16,5^8(虽然没有,但规律是这样),5^4,5^2,5^1[前一项是后一项的平方]
2.我们可以通过&1来得到一个数的最后一位,可以通过>>符号将二进制往右边移一位。
有了上面两点,我们来实现快速幂的算法:
long quick(long a,long n){
long base=a;
long res=1;
while(n!=0){ //判断次方n的二进制是否已经移动完了
if((n&1</