51NOD 1046 A^B Mod C

给出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 }

猜你喜欢

转载自www.cnblogs.com/Ekalos-blog/p/9627375.html
今日推荐