快速幂底大于1e9时需要mod一下,才行, 不然快速幂里面就会乘爆了
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
long long a, m ,n ;
const long long mod = 1e9 + 7;
long long qp(long long n ,long long m){
long long ans = 1;
while(m > 0){
if(m & 1) ans = ans * n % mod;
m >>= 1;
n = n * n % mod;
}
return ans % mod;
}
int main(){
// long long now = 1e18;// cout << now * now % mod << endl;
while(scanf("%lld%lld%lld", &a, &m, &n) != EOF){
a %= mod;
long long gcd = __gcd(m ,n );// cout << gcd << endl;
long long ans = qp(a, gcd) - 1 ;
//ans = (ans + mod) % mod;
cout << ans << endl;
}
}
还有就是多次询问时候里面不能套for循环,谨慎