poj 1995
需要的知识,
快速幂和取模的运算
1 (a+b)%p=(a%p+b%p)%p
-
(a – b) % p = (a % p – b % p) % p
-
(a * b) % p = (a % p * b % p) % p
-
(a^b) % p = ((a % p)^b) % p
5… ((a+b) % p + c) % p = (a + (b+c) % p) % p
-
((ab) % p * c)% p = (a * (bc) % p) % p
-
((a +b)% p * c) % p = ((a * c) % p + (b * c) % p) % p
-
若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取模 得数相同)
题目大意;
对(ab+a1b1+a2^b2……)%m 进行运算;
ac代码
#include<stdio.h>
typedef long long ll;
ll mm;
ll pow(ll a,ll b){
ll ans=1;
while(b>0){
if(b&1)ans = (ansa) % mm;
a = (a%mm)(a%mm) % mm;
b>>=1;
}
return ans;
}
int main(){
int m;
scanf("%d",&m);
for(int i=1;i<=m;i++){
ll n;
scanf("%lld%lld",&mm,&n);
ll a[45001][2];
for(int i=1;i<=n;i++){
scanf("%lld%lld",&a[i][0],&a[i][1]);
}
ll ans1=0;
for(int i=1;i<=n;i++){
ans1+=pow(a[i][0],a[i][1]);
}
ans1%=mm;
printf("%lld\n",ans1);
}
}