二分求幂用于快速求得a的b次方。
这里的方法是求得b的二进制数。如求3的31次方,首先求的31的二进制数 11111,即拆3的即 3^31 = 3^0 * 3^1 * 3^2 * 3^4 * 3^8 * 3^16
题目描述:
求A^B的最后三位数表示的整数。说明:A^B的含义是“A的B次方”
输入:
输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A,B<=10000),如果A=0, B=0,则表示输入数据的结束,不做处理。
输出:
对于每个测试实例,请输出A^B的最后三位表示的整数,每个输出占一行。
样例输入:
2 3
12 6
6789 10000
0 0
样例输出:
8
984
1
1 #include<stdio.h> 2 #include<stdlib.h> 3 int main() 4 { 5 int a,b; 6 int ans; 7 while( scanf("%d %d",&a,&b)!=EOF) 8 { 9 if( a==0 && b==0) break; 10 11 ans = 1; 12 while( b!=0) 13 { 14 //把b转换为二进制 15 if( b%2==1) 16 { 17 //如果当前二进制位为1则需要累乘a的2^k次 18 ans *= a; 19 ans %=1000; //求后三位 20 } 21 b /= 2; 22 a *= a; //求下一个二进制位的权重 23 a %=1000; 24 } 25 printf("%d ",ans); 26 } 27 return 0; 28 }