快速求幂二分算法

来源:互联网 发布:视频音量调节软件 编辑:程序博客网 时间:2024/04/30 04:40
#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..........

所以当b2^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^2a^4,如果2+4就变成6了,求出结果为a^6

所以只需加个判定条件

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

所以加个if(b%2)

        r=r*base;

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

 


0 0
原创粉丝点击