FZU Super A^B mod C
Super
A^B mod C
Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,C<=1000000000,1<=B<=10^1000000).
There are multiply testcases. Each testcase, there is one line contains three integers A, B and C, separated by a single space.
Output
For each testcase, output an integer, denotes the result of A^B mod C.
Sample Input
3 2 4
2 10 1000
Sample Output
1
24
算法分析:
歐拉函數值得一個應用。即:A^B % C = A^(B%(euler_phi(C)) % C * A ^ euler_phi(C)。
至於如何退出這個定理的話,我就不知道了。感興趣的可以自己百度。而等式為什麼成立呢〉?
因為,我們會發現一個規律。當A^B % C 的時候,會在某個數後出現循環節。而總結規律會發現,這個循環節剛好就是euler_phi(C)。所以,我們只要最B先取余歐拉值就會得使得數據變成在10^9以內,這時候就可以用普通的做法解決了。
而如果當C是素數的時候卻是特殊的情況。由費馬小定理我們可以知道,此時A^B
% C = A ^ (B %(C - 1)) % C 用java寫老是CE.......後來無奈的只能用暴力模擬了。
#include
#include
#include
#include
#include
#include