hdu2035 快速幂

来源:互联网 发布:编程需要学的软件 编辑:程序博客网 时间:2024/04/28 12:01

    本题是求A^B的最后三位数表示的整数,快速幂嘛,当然就是快速的求幂,时间复杂度可以达到log级。比如说本题,B的范围是10的5次方,那么计算17次左右就可以得到答案了,即使范围到了10的9次方也就是30多次而已。


其实这个的要点就是位运算和二进制,比如说计算x^45 

(45)10=(101101)2

x^45 = x^32 * x^8 * x^4 * x^1

很明显计算出x,x^2,x^4,x^8...即可,位运算很容易做到这一点。


#include<stdio.h>const int mod=10000;int ans(int a,int b){    int ret=1;    while(b)    {        if(1&b)ret=ret*a%mod;        //printf("ret%d\n",ret);        a=a*a%mod;        //printf("a%d\n",a);        b>>=1;    }    return ret;}int main(){    int A,B;    while(scanf("%d%d",&A,&B)==2)    {        if(A==0&&B==0)return 0;        printf("%d\n",ans(A,B)%1000);    }    return 0;}


0 0
原创粉丝点击