您的位置:首页 > 其它

快速求幂二分算法

2015-09-02 18:20 323 查看
#include<stdio.h>

int a,b;

void input()
{
int pow1();
while(scanf("%d%d",&a,&b)==2)
{
pow1();
}
}

void pow1()
{
int r,base;
base=a;
r=1;
while(b!=0)
{
if(b%2)
{
r=r*base;//把结果保留到r当中
}
base=base*base;
b=b/2;//每次进行缩半,对base=base*base这一步起到约束作用
}
printf("%d\n",r);
}

int main()
{
input();
return 0;
}


二分算法

求a^b

二分法:

此处b=b/2;体现二分

base=a;

base=base*base;

可推出a^2,a^4,a^8,a^16..........

所以当b为2^n时

可用如下代码:while(b!=1)

              {

               base=base*base;

               b=b/2;

                }

当b不为2^n时

比如b=6;

则按上述代码:

base=a^2;  b=2;

base=a^4;  b=1

求出结果为a^4,不符,

我们可以观察到a^2和a^4,如果2+4就变成6了,求出结果为a^6

所以只需加个判定条件

我们可以看到a^2时,b=3

所以加个if(b%2)

        r=r*base;

同时把while(b!=1)变为while(b)

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: