HDU 2035 人见人爱A^B(快速幂取模 )

来源:互联网 发布:国际软件 编辑:程序博客网 时间:2024/06/05 00:45

人见人爱A^B

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 34030    Accepted Submission(s): 23080


Problem Description
求A^B的最后三位数表示的整数。
说明:A^B的含义是“A的B次方”

Input
输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A,B<=10000),如果A=0, B=0,则表示输入数据的结束,不做处理。

Output
对于每个测试实例,请输出A^B的最后三位表示的整数,每个输出占一行。

Sample Input
2 312 66789 100000 0

Sample Output
89841

Author
lcy
 
题解:快速幂取模 
AC代码:
#include<iostream>#include<cstdlib>#include<cstdio>#include<cmath>#include<cstring>#include<string>#include<cstdlib>#include<iomanip>#include<algorithm>typedef long long LL;using namespace std;/*int pow_mod(int a,int p)    //快速幂取模 {    if(p==0) return 1;    int ans=pow_mod(a,p/2);    ans=ans*ans%1000;    if(p%2==1) ans=ans*a%1000;    return ans;}*/int pow_mod(LL a,LL b,int c){    //快速幂取模 LL ans=1;a=a%c;while(b>0){if(b&1){         //b&1相当于b%2==1ans=(ans*a)%c;}b=b>>1;          a=(a*a)%c;}return ans;}int main(){    int a,b;    while(scanf("%d%d",&a,&b)!=EOF)    {        if(a==0&&b==0) break;        printf("%d\n",pow_mod(a,b,1000));    }}

模拟:
#include<cstdio>using namespace std;int main(){    int a,b;    while(scanf("%d%d",&a,&b)!=EOF)       {        if(a==0&&b==0) break;        int ans=1;        for(int i=0;i<b;i++)   //模拟             ans=ans*a%1000;        printf("%d\n",ans);    }}



1 0