给出3个正整数A B C,求A^B Mod C。
例如,3 5 8,3^5 Mod 8 = 3。
Input
3个正整数A B C,中间用空格分隔。(1 <= A,B,C <= 10^9)
Output
输出计算结果
Input示例
3 5 8
Output示例
3
解:
思路一:暴力求解。
思路二:通过公式(a * b) mod c = ((a mod c)*(b mod c)) mod c 简化求解。
思路三:快速幂。简单的说,快速幂就是将指数转化为二进制的形式并差分开相乘(理解的关键在于明白指数上二进制每左移一位,整个数就在原基础上乘方)。
思路二较之思路一避免了求解a^b的过程中,其值溢出的可能;而快速幂则提高了计算a^b的速度。
1 #include <stdio.h> 2 3 int main() 4 { 5 long long a, b, c; 6 while (scanf_s("%lld%lld%lld", &a, &b, &c) != EOF) 7 { 8 int ans = 1; 9 a %= c; 10 while (b) 11 { 12 if (b & 1) 13 { 14 ans = ans * a % c; 15 } 16 a = a * a % c; 17 b >>= 1; 18 } 19 printf("%d\n", ans); 20 } 21 return 0; 22 }