快速幂取模:
先写一些取模公式: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) % p
4. (a^b) % p = ((a % p)^b) % p
5.. ((a+b) % p + c) % p = (a + (b+c) % p) % p
6. ((a*b) % p * c)% p = (a * (b*c) % p) % p
7. ((a +b)% p * c) % p = ((a * c) % p + (b * c) % p) % p
8. 若a≡b (% p),则对于任意的c,都有(a + c) ≡ (b + c) (%p)
9 若a≡b (% p),则对于任意的c,都有(a * c) ≡ (b * c) (%p)
10 若a≡b (% p),c≡d (% p),则 (a + c) ≡ (b + d) (%p),(a – c) ≡ (b – d) (%p),
(a * c) ≡ (b * d) (%p),(a / c) ≡ (b / d) (%p) (a≡b (% p)表示a,b对p取模 得数相同)
#include<stdio.h>
long int Fmulti(long int a,long int b,int mod) //快速幂
{
int res=1;
while(b>0)
{
if(b&1) //判断是否是奇数
res=(res*a)%mod;
a=((a%mod)*(a%mod))%mod; // 取模
b>>=1; // b除以2
}
return res;
}
int main(void)
{
long int mod,N,a,b,n,amount,i;
scanf("%d",&N);
while(N--)
{
amount=0;
scanf("%d%d",&mod,&n);
for(i=0;i<n;i++)
{
scanf("%d%d",&a,&b);
amount+=Fmulti(a,b,mod);
amount%=mod;
}
printf("%d\n",amount);
}
}