1995:Raising Modulo Numbers
keyword
べき乗 C++
概要
A_iとB_iとMが与えられたときsum(A_i^B_i) (mod M)を求める問題。数列の長さやMは45000以下。
AとBに関する制限は不明だけどさすがにintには収まるだろうと信じる。べき乗はO(log n)で計算できるので後は書くだけで良い。
inline ll powMod(ll base, ll n, ll mod){ if(!n) return 1; if(n&1) return base*powMod(base,n-1,mod)%mod; return powMod(base*base%mod, n>>1, mod); } int main(){ ll rept, i, m, n, a, b, ans; scanf("%lld",&rept); while(rept--){ scanf("%lld",&m); scanf("%lld",&n); ans = 0; REP(i,n){ scanf("%lld%lld",&a,&b); ans += powMod(a,b,m); } printf("%lld\n",ans%m); } return 0; }