poj1995 Raising Modulo Numbers

http://poj.org/problem?id=1995

快速幂的模板,用来练习快速幂

快速幂模板:

int quick(int a,int b,int c)  {  
    int ans=1;a=a%c; 
    while(b!=0){  
        if(b&1) ans=(ans*a)%c; 
        b>>=1; 
        a=(a*a)%c;
    }  
    return ans;  
}  

so……

(我也不知道为什么要写这道题题解)

ac代码:

#pragma G++ optimize(2)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
using namespace std;
#define REG register
#define REP(i,x,y) for(REG int i=x;i<=y;i++)
#define UP(i,x,y) for(REG int i=x;i>=y;i--)
#define IN inline
#define ll long long 

int quick(int a,int b,int c)  {  
    int ans=1;a=a%c; 
    while(b!=0){  
        if(b&1) ans=(ans*a)%c; 
        b>>=1; 
        a=(a*a)%c;
    }  
    return ans;  
}  

int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        int ans=0,a,b,n,mod;
        scanf("%d %d",&mod,&n);
        REP(i,1,n){
            scanf("%d %d",&a,&b);
            ans+=quick(a,b,mod);//听说这样更快
        }
        printf("%d
",ans%mod);
    }
    
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/EvfX/p/8612134.html