题意思路:
给定公式,意思就是求一个等比数列的值,等比数列求和公式,按照原先的是会超时的,所以需要更快速的公式。
然后在通过快速幂的方式取模,降低复杂度。
呜呜呜,数学没学好,就不推了。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,q,p;
ll qpow(ll q,ll n)//快速幂~(顺便记一下快速幂的板子)
{
ll res=1;
while(n)
{
if(n&1) res=res*q%p;
q=q*q%p;
n=n/2;
}
return res;
}
ll dengbi(ll n)//等比公式
{
if(n==1) return q;
if(n&1)
{
return ((1+qpow(q,(n+1)/2))*(dengbi((n-1)/2))%p+qpow(q,(n+1)/2))%p;
}
else
{
return (dengbi(n/2)*(1+qpow(q,n/2))%p);
}
}
int main ()
{
int t;cin>>t;
while(t--)
{
cin>>q>>n>>p;
if(q==1)
cout<<n<<endl;
else
cout<<dengbi(n)<<endl;//求值
}
}