题意给你h组a和b计算这些a^b的和mod给定m的值
直接上代码:
code
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=45000+10;
long long a[maxn];
ll quickpow(ll a,ll b,ll p)
{//calculate a^b%p
ll ans=1%p;
while(b)//二进制分解 a^b=a^(ck-1*2^k-1).....ck-1表示b的第l位是否是1
{
if(b&1)ans=(ll)ans*a%p;//从a的1次方开始
a=(ll)a*a%p;
b>>=1;
}
return ans;
}
ll mul(ll a,ll b,ll p)
{
ll ans=0;
while(b)
{
if(b&1)ans=(ans+a)%p;//从a的1次方开始
a=a*2%p;
b>>=1;
}
return ans;
}
int main()
{
int t;
cin>>t;
while(t--)
{
int m;
int h;
cin>>m>>h;
for(int i=1;i<=h;i++)
{
ll x,y;
cin>>x>>y;
a[i]=quickpow(x,y,m);
}
ll ans=0;
for(int i=1;i<=h;i++)
ans=(ans+a[i])%m;
cout<<ans<<endl;
}
}