整数快速幂
https://www.cnblogs.com/sun-of-Ice/p/9330352.html
typedef long long ll;
ll mod;
ll qpow(ll a, ll n)//计算a^n % mod
{
ll re = 1;
while(n)
{
if(n & 1)//判断n的最后一位是否为1
re = (re * a) % mod;
n >>= 1;//舍去n的最后一位
a = (a * a) % mod;//将a平方
}
return re % mod;
}
取模运算一般情况下是需要的,当然也可以省去。
POJ 1995
#include<iostream> #define rep(i, n) for(int i=0;i!=n;++i) #define per(i, n) for(int i=n-1;i>=0;--i) #define Rep(i, sta, n) for(int i=sta;i!=n;++i) #define rep1(i, n) for(int i=1;i<=n;++i) #define per1(i, n) for(int i=n;i>=1;--i) #define Rep1(i, sta, n) for(int i=sta;i<=n;++i) #define L k<<1 #define R k<<1|1 #define inf (0x3f3f3f3f) #define llinf (1e18) #define mid (tree[k].l+tree[k].r)>>1 #define ALL(A) A.begin(),A.end() #define SIZE(A) ((int)A.size()) typedef long long i64; using namespace std; i64 MOD; i64 qpow(i64 a,i64 n) { i64 tmp = 1; while(n) { if(n & 1) tmp = (tmp * a) % MOD; n >>= 1; a = (a * a) % MOD; } return tmp; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); i64 t,n,a,b,x,y; cin >> t; while(t--) { i64 sum = 0; cin >> MOD >> n; rep(i,n) { cin >> a >> b; sum += qpow(a,b); } cout << sum % MOD <<'\n'; } return 0; }
不怕万人阻挡,只怕自己投降。
posted on 2019-10-20 17:46 chengyulala 阅读(140) 评论(0) 编辑 收藏 举报