用三种方法求幂值
一. 暴力递归
直接对x乘y次
int result(int x,int y)
{
int num=1;
for (int i=1; i<=y; i++) {
num*=x;
}
return num;
}
这种方法有手就行,但是运行时间往往过长
二. 快速幂
主要利用递归,它的思想类似于分治,把大问题分割为小问题,再将小问题的结果合计为大问题的解
t4=t2+t2
t^{4}=t^{2}+t^{2}
t4=t2+t2
所以我们可以对幂指数进行不断的二分,达到降低时间复杂度的效果
int result(int x,int y)
{
if(y==0)return 1;
if(y==1)return x;
int t=result(x, y/2)*result(x, y/2);
if(y%2==0)return t;
else return t*x;
}
当幂指数y为奇数时,还要乘一次自身
三 .二进制求幂
假设指数为7,可写为
7=22+21+20其二进制形式为111,且每一位都等于前一位的平方
7=2^{2}+2^{1}+2^{0}
其二进制形式为111,且每一位都等于前一位的平方
7=22+21+20其二进制形式为111,且每一位都等于前一位的平方
long long qpow(int base,int p){
long long ans=1,tmp=base;//从底数开始乘,不停自乘
while(p!=0){//指数不是0
if(p&1){
ans=(ans*tmp);
}
tmp=(tmp*tmp);//自乘
p=p>>1;//访问下一位
}
return ans;
}
再此方法下,时间复杂度最低
希望大家三连关注,嘻嘻,我会继续更新c语言和python方面的文章,希望大家多多支持。