快速幂求模
输入a,b,c,求a的b次方对c的模,如果直接用pow函数,时间复杂度为o(n),有可能会发生超时或者超过long long的取值范围
或每次运算都对ans取余,但这样只能优化取值范围,所以要用到快速幂求模,利用二分的思想,减少相乘次数,增大相乘的数值
#include<iostream> #include<cstdio> using namespace std; typedef long long ll; ll pow(ll a, ll b, ll c) { ll ans = 1; a %= c; while(b) { if(b & 1) ans = ans * a % c; b /= 2; a = a * a % c; } return ans; } int main() { int n; ll a, b, c; cin >> n; while(n--) { cin >> a >> b >> c; int ji = 1; cout << pow(a, b, c) << endl; } return 0; }
作者:kindleheart
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。