ps: 模运算在此不再赘述...
#include<iostream>
using namespace std;
typedef long long ll;
ll p;
ll qpow(ll a, ll x)
{
ll res = 1;
while(x)
{
if(x & 1) res = res * a % p;
x >>= 1;
a = a * a % p;
}
return res;
}
ll sum(ll a, ll x)
{
if(x == 1) return a % p;
else if(x & 1) return ( sum(a, x / 2) % p + ( (sum(a, x / 2) % p) * (qpow(a, x / 2) % p) ) + qpow(a, x) % p ) % p;
else return ( sum(a, x / 2) % p + ( (sum(a, x / 2) % p) * (qpow(a, x / 2) % p) ) ) % p;
}
int main()
{
int t;
cin >> t;
while(t --)
{
ll q, n;
cin >> q >> n >> p;
cout << sum(q, n) << endl;
}
return 0;
}
Icebound and Sequence(等比数列求和、快速幂、二分思想)
原文:https://www.cnblogs.com/K2MnO4/p/14702169.html