d636
輸入說明 :
每個測資點僅一組測資,不必EOF讀檔。 測資包含一列兩個數字a和b (1<=a<=65535 , 1<=b<=2147483647)
輸出說明 :
請輸出a^b的值,為了避免數字太大,將結果mod10007輸出就可以了!
這是討論區的答案
要解這題要先知道
a^b%10007=(a%10007*a%10007..... 乘以b次)%10007
知道這件事之後,這個程式碼就是這樣
ex 10009^12 %10007 12分解成2進位是1100
可以看成(10009^8%10000710009^4%10007) %10009 而10009^2%10007可以看成 (10009%10007)35%10009
10009^3%10007可以看成(10009%10007)10009%10007)10009%10007
#include <stdio.h>
int powmod(int a, int b)
{
int bin=1;
int i;
int res=1;
int tmp=a%10007;
for(i=0; i<32; i++)
{
if(b & bin)
res = res * tmp % 10007;
bin <<= 1;
tmp = tmp * tmp % 10007;
}
return res;
}
int main()
{
int a, b;
scanf("%d %d", &a, &b);
printf("%d\n", powmod(a, b));
return 0;
}