Untestet, but you get the idea. This should work as long as 2*mod less than the maximum displayed value long long and a , b and mod are positive.
long long modpow(long long a,long long b,long long mod) { long long product,pseq; product=1; pseq=a%mod; while(b>0) { if(b&1) product=modmult(product,pseq,mod); pseq=modmult(pseq,pseq,mod); b>>=1; } return product; } long long modmult(long long a,long long b,long long mod) { if (a == 0 || b < mod / a) return (a*b)%mod; long long sum; sum = 0; while(b>0) { if(b&1) sum = (sum + a) % mod; a = (2*a) % mod; b>>=1; } return sum; }
source share