题目链接:https://ac.nowcoder.com/acm/contest/903/B
同类型题目:https://www.51nod.com/Challenge/Problem.html#!#problemId=1013
(x^n)%p
运算规则:
模运算与基本四则运算有些相似,但是除法例外。其规则如下:
(a + b) % p = (a % p + b % p) % p (1)
(a - b) % p = (a % p - b % p) % p (2)
(a * b) % p = (a % p * b % p) % p (3)
a ^ b % p = ((a % p)^b) % p (4)
结合律:
((a+b) % p + c) % p = (a + (b+c) % p) % p (5)
((ab) % p * c)% p = (a * (bc) % p) % p (6)
分配律:
(a+b) % p = ( a % p + b % p ) % p (7)
#include <stdio.h>
typedef long long ll;
ll c;
//快速求幂
ll power(ll a, ll b ,ll _MOD)
{
ll ans = 1;
while (b)
{
if (b & 1)
{
ans = (ans * a) % _MOD;
b--;
}
b >>= 1; // b/2
a = (a * a) % _MOD;
}
return ans;
}
//**注意递归循环**
***ll sum(ll a, ll k,ll _MOD)
{
if (k == 1)
{
return a;
}
c = sum(a, k/2,_MOD); //前k/2个次幂的和
//ans等于前k/2个次幂的和加上奇数次方
ll ans = (c + c * power(a,k/2,_MOD)) % _MOD;
//奇数次方
if (k & 1) //k是否为奇数
{
ans = (ans + power(a, k,_MOD)) % _MOD; //偶数次
}
return ans;
}***
int main()
{
ll n,q,_MOD;
int t;
scanf("%d",&t);
while(t--){
scanf("%lld%lld%lld", &q,&n,&_MOD);
printf("%lld\n",((sum(q,n,_MOD) % _MOD)));
}
return 0;
}