同余模公式:
(a+b)%m=(a%m+b%m)%m
(a*b)%m=(a%m*b%m)%m
/*
* POJ_1995.cpp
*
* Created on: 2013年11月19日
* Author: Administrator
*/
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
/**
* 快速幂取模
* 求a^b%m的值
*/
ll qpow(ll a, ll b, ll m) {
ll ans = 1;
while (b) {
if (b & 1) {
ans *= a;
ans %= m;
}
a *= a;
a %= m;
b >>= 1;
}
return ans;
}
int main() {
int z;
scanf("%d", &z);
while (z--) {
ll m, h;
scanf("%lld%lld", &m, &h);
ll ans = 0;
while (h--) {
ll a, b;
scanf("%lld%lld", &a, &b);
ans += qpow(a, b, m);//这里应用到了同余模公式:(a+b)%m=(a%m+b%m)%m
ans %= m;
}
printf("%lld\n", ans);
}
return 0;
}
同余模公式与快速幂取模

本文介绍了一种利用同余模公式简化大数运算的方法,并通过一个具体的C++程序实例展示了如何使用快速幂取模算法计算a^b%m的值。此算法在处理大数指数运算时特别有效。
2万+

被折叠的 条评论
为什么被折叠?



