Description: Given B, P, K (B ^ p) % K
Idea: The main idea is to quickly calculate power, there are recursive and non-recursive ideas.
Recursive errors may cause overflow.
#include <iostream>#include <queue>#include <climits>#include <algorithm>#include <memory.h>#include <stdio.h>#include <ostream>#include <vector>#include <list>#include <cmath>#include <string>#include <stdexcept>#include <stack>#include <map>using namespace std;long long pow(long long a,long long b,long long k){ if(b == 0) return 1; if(b == 1) return a%k; long long t = pow(a,b>>1); if((b&1) == 0) { return t*t%k; } else { return t*t*a%k; }}int main(){ long long b,p,k; cin>>b>>p>>k; long long b1 = b; long long p1 = p; //long long ans = pow(b,p); //ans = ans%k; long long ans = 1; b = b%k; while(p>0) { if(p%2 == 1) ans = ans*b%k; p/=2; b = b*b%k; } cout<<b1<<"^"<<p1<<" mod "<<k<<"="<<ans<<endl; return 0;}