HDU2035 人見人愛A B 快速冪

2022-02-15 19:30:34 字數 1174 閱讀 1514

描述:

求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 #include2

intmain()3

11 printf("

%d\n

",k);

12 k=1;13

}1415return0;

16 }

快速冪**:

1 #include2

int fastpow(int a,int b,int

kkk)

8 b >>= 1

;9 a= a*a%kkk;10}

11return

ans;12}

13int

main()

1421

22return0;

23 }

解題思路(快速冪):

(11的二進位制是1011.即

11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1。

備忘錄位運算:右移一位相當於除2.左移一位相當於乘2)

本題正式思路:while迴圈就是控制當b為0的時候迴圈結束。if語句就是使用按位與「&」,當兩邊都為1,表示式為1,這個是用來判斷二進位制數最後一位是否為1。如果為1,ans就要乘x^i,i為該位在二進位制數中的位置。>>為位運算子,右移一位,即去掉已經計算過的部分。最後的

a= a*a%kkk;用來標記記錄x^2^i,迴圈i次即去掉了i位,當第i+1位為1時,sum就要乘x^2^i。~

HDU 2035 人見人愛A B

法一 每次取餘數 include includeint main system pause return 0 法二 其實直接每次取餘數就能過的 第一遍就是用這種方法過的 這次算是用二分加速過的吧 就是每次都講底數平方 指數除以2 要是偶數沒問題 要是奇數就在將多餘的那部成到sum中 初始值為1 不停...

HDU 2035 人見人愛A B

problem description 求a b的最後三位數表示的整數。說明 a b的含義是 a的b次方 input 輸入資料報含多個測試例項,每個例項佔一行,由兩個正整數a和b組成 1 a,b 10000 如果a 0,b 0,則表示輸入資料的結束,不做處理。output 對於每個測試例項,請輸出a...

HDU 2035 人見人愛A B

題目連線 法一 每次取餘數 1 include2 include3 intmain 413 system pause 14return0 15 法二 其實直接每次取餘數就能過的 第一遍就是用這種方法過的 這次算是用二分加速過的吧 就是每次都講底數平方 指數除以2 要是偶數沒問題 要是奇數就在將多餘的...