POJ 1995 Raising Modulo Numbers

题目

( A 1 B 1 + A 2 B 2 + . . . + A H B H ) m o d M .


分析

用快速幂,把 O b 变成 O ( l o g 2 b )


代码

#include <cstdio>
#include <cctype>
using namespace std;
int z,a,b,c,p,n,ans;
void rn(int &a,int &b){scanf("%d",&a); scanf("%d",&b);}
int mul(int a,int b,int p){
    int ans=1;
    while (b){
        if (b&1) ans=(long long)ans*a%p;
        a=(long long)a*a%p; b>>=1;
    }
    return ans;
}
int main(){
    scanf("%d",&z);
    while (z--){
        rn(p,n); ans=0;
        while (n--){
            rn(a,b);
            ans=(ans+mul(a,b,p))%p;    
        }
        printf("%d\n",ans);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/sugar_free_mint/article/details/80299303