补上快速幂的算法,与快速乘法有区别,乘法是乘,加法是加,看懂了就感觉简单,也是通过二进制计算的,其中就是对底数处理一下,防止底数过大爆了,还有就是没次步骤都进行求余,也是防止数据过大!
#include <iostream>
using namespace std;
typedef long long int ll;
ll m;
ll quick(ll a ,ll b)
{
ll abs=a%m;
ll ans=1;
while(b)
{
if(b&1)
ans=(ans*abs)%m;
abs=(abs*abs)%m;
b>>=1;
}
return ans;
}
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>m>>n;
ll sum=0;
while(n--)
{
ll a,b;
cin>>a>>b;
sum=(sum+quick(a,b))%m;
}
cout<<sum%m<<endl;
}
}