题目链接:传送门 //a^b
传送门 //64位整数乘法
题目:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
描述 求 a 的 b 次方对 p 取模的值,其中 1≤a,b,p≤10^9 输入格式 三个用空格隔开的整数a,b和p。 输出格式 一个整数,表示a^b mod p的值。 样例输入 2 3 9 样例输出 8
模板:(快速幂)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <bits/stdc++.h> using namespace std; int fpow(int a, int b, int p) { int ans = 1; for (; b; b >>= 1) { if (b&1) ans = (1LL * ans * a) % p; a = (1LL * a * a) % p; } return ans%p; } int main() { int a, b, p; cin >> a >> b >> p; int ans = fpow(a, b, p); cout << ans << endl; return 0; }
题目:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
描述 求 a 乘 b 对 p 取模的值,其中 1≤a,b,p≤10^18。 输入格式 第一行a,第二行b,第三行p。 输出格式 一个整数,表示a*b mod p的值。 样例输入 2 3 9 样例输出 6
模板:(快速乘)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll fmul(ll a, ll b, ll p) { ll ans = 0; for (; b; b >>= 1) { if (b&1) ans = (ans + a) % p; a = (a+a)%p; } return ans%p; } int main() { ll a, b, p; cin >> a >> b >> p; ll ans = fmul(a, b, p); cout << ans << endl; return 0; }