题目链接:https://ac.nowcoder.com/acm/contest/903/B
题意:类似求 q n % p q^{n}\%p qn%p当 p p p不是素数。题目就是将 q n q^{n} qn改成一个等比数列求和。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll mul(ll a, ll b, ll p)
{
ll ret = 0;
while(b){
if(b & 1) ret = (ret + a) % p;
a = (a + a) % p;
b >>= 1;
}
return ret;
}
ll power(ll a, ll n, ll p)
{
ll ret = 1;
while(n){
if(n & 1) ret = mul(ret, a, p);
a = mul(a, a, p);
n >>= 1;
}
return ret;
}
int main()
{
int T;
cin >> T;
while(T--){
ll n, q, p;
cin >> q >> n >> p;
if(q == 1) cout << n % p << endl;
else{
ll mod = (q - 1) * p;
ll b = (power(q, n + 1, mod) - q + mod) % mod;
ll a = q - 1;
ll ans = b / a;
ans %= p;
cout << ans << endl;
}
}
return 0;
}