hihocoder1777 彩球
Posted wangyiming
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hihocoder1777 彩球相关的知识,希望对你有一定的参考价值。
思路:
记录一下快速幂计算过程中爆long long的两种解决方法:
1. 使用__int128,这玩意本地编译不通过,提交OJ能AC。
实现:
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 5 __int128 qpow(__int128 a, __int128 b, __int128 mod) 6 { 7 __int128 ret = 1LL; 8 while (b) 9 { 10 if (b & 1) ret = ret * a % mod; 11 a = a * a % mod; 12 b >>= 1; 13 } 14 return ret; 15 } 16 17 int main() 18 { 19 LL n, k, P; 20 scanf("%lld %lld %lld", &n, &k, &P); 21 LL ans = qpow(k, n, P); 22 printf("%lld ", ans); 23 return 0; 24 }
2. 利用和快速幂类似的思想实现如下不会溢出的乘法操作。
实现:
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 LL n, k, p; 5 LL mul(LL a, LL b) 6 { 7 LL ans = 0; 8 while (b) 9 { 10 if (b & 1) ans = (ans + a) % p; 11 a = (a + a) % p; 12 b = b >> 1; 13 } 14 return ans; 15 } 16 17 LL Pow(LL a, LL b) 18 { 19 LL result = 1; 20 LL base = a % p; 21 while (b) 22 { 23 if (b & 1) result = mul(result, base) % p; 24 base = mul(base, base) % p; 25 b = b >> 1; 26 } 27 return result; 28 } 29 30 int main() 31 { 32 cin >> n >> k >> p; 33 cout << Pow(k, n) << endl; 34 return 0; 35 }
以上是关于hihocoder1777 彩球的主要内容,如果未能解决你的问题,请参考以下文章