给定n个等比数列 等比为q,p为模
求等比和求模
直接上板子
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
ll multi(ll a,ll b,ll m) // 二分乘法
{
ll ans=0;
a%=m;
while(b)
{
if(b&1)
{
ans=(ans+a)%m;
b--;
}
b>>=1;
a=(a+a)%m;
}
return ans;
}
ll quick_mod(ll a,ll b,ll mod)
{
ll res=1;
while(b)
{
if(b%2==1)
res=multi(res,a,mod);
// 二分乘法不然会数据溢出
b>>=1;
a=multi(a,a,mod);
// 二分乘法不然会数据溢出
}
return res;
}
int main()
{
int t;
cin>>t;
while(t--){
ll n,q,p;
cin>>q>>n>>p;
if(q==1) cout<<n%p<<endl;
else
cout<<(quick_mod(q,n,p*(q-1))-1)/(q-1)*q%p<<endl;
}
// 首项为q,公比为q,长度为n的等比数例求和
return 0;
}