---
tags: codebook
---
{%hackmd theme-dark %}
# exponentiation by squaring
```cpp=
#include<iostream>
#include<limits>
using namespace std;
inline long long pow(long long a,long long b,long long m=numeric_limits<int>::max()){
long long re;
for(re=1;b;b>>=1,a=a*a%m)
if(b&1) re=re*a%m;
return re;
}
inline long long powi(const long long& a,const long long& b){
if(!b) return 1;
long long tmp=powi(a,b>>1);
return (b&1?tmp*tmp*a:tmp*tmp);
}
int main(){
cout<<pow(7,15)<<endl;
return 0;
}
```