poj 1995 Raising Modulo Numbers

题目:Raising Modulo Numbers

思路:快速幂

#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;
unsigned long long Pow(unsigned long long a,unsigned long long b,unsigned long long mod)
{
    unsigned long long ans=1;
    while(b)
    {
        if(b&1)
        {
            b--;
            ans=(ans*a)%mod;
        }
        else
        {
            b/=2;
            a=(a*a)%mod;
        }
    }
    return ans;
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        unsigned long long mod;
        int h;
        scanf("%lld",&mod);
        scanf("%d",&h);
        unsigned long long ans=0;
        unsigned long long tmp,a,b;
        for(int i=1;i<=h;i++)
        {
            scanf("%llu%llu",&a,&b);
            tmp=Pow(a,b,mod);
            ans=(ans+tmp)%mod;
        }
        printf("%llu
",ans);
    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/overflow/p/3193343.html