POJ1995 Raising Modulo Numbers

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhaohaibo_/article/details/82810299

题目描述

题目解释:有的人喜欢看充满小姐姐的画报,有的人喜欢玩游戏,而我喜欢求 ( A 1 B 1 + A 2 B 2 + . . . + A H B H ) m o d M (A_1^{B_1}+A_2^{B_2}+ ... +A_H^{B_H})mod M

输入
第一行为组数,对于每组数据,第一行为M,第二行为该组数据的A、B的个数。

3
16
4
2 3
3 4
4 5
5 6
36123
1
2374859 3029382
17
1
3 18132

输出:
每组数输出一个结果

2
13195
13

求快速幂。

#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;
typedef long long ll;

ll mul(ll a, ll b, ll p){
    ll ans = 1 % p;
    for(;b;b >>= 1) {
        if(b & 1)
            ans = (ll)(ans * a) % p;
        a = (ll)a * a % p;
    }
    return ans;
}
int main(){
    int N;
    cin>>N;
    while(N--){
        ll ans = 0;
        ll p;int m;
        scanf("%lld %d",&p,&m);
        while(m--){
            ll a,b;
            scanf("%lld %lld", &a, &b);
            ans += mul(a, b, p);
        }
        printf("%lld\n",ans % p);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zhaohaibo_/article/details/82810299