1. 程式人生 > >二分求冪

二分求冪

style std pos size 表示 兩個 數據 class 轉換

二分求冪用於快速求得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\n",ans); 26 }
27 return 0; 28 }

二分求冪