【C】快速幂

匿名 (未验证) 提交于 2019-12-02 23:43:01

快速幂代码如下:

int me(int a,int b)//传入a的b次方  {     int ans=1;          while(b!=0)     {         if(b&1==1)         {             ans*=a;         }         a*=a;         b=b>>1;     }          return ans; }

以3的11次方为例。

则a=3,b=11

将11用二进制表示,11(2)=1011,可以将11拆解为20+21+23

3的11次方可以表示为3^(20+21+23

3的三次方拆解为3^(20)・3^(21)・3^(23

用位运算&1得出3末尾的二进制数,>>=1右移一位,逐个取得3的每一位二进制数进行计算。

a*a的意义:31→32→34→38→316→332→...

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!