Тема: двоичное возведение в степень
Я чет не понял зачем сложный if.. онж по сути добавляет итерацию цикла лишнюю после каждого срабатывания n&1
while (n)
if (n & 1) {
res *= a;
--n;
}
else {
a *= a;
n >>= 1;
}
не прощели так? прост проходимся по числам вида n^(2^k) , если нужно - домножаем
while(n) {
if(n & 1)
res *= a;
a *= a;
n = n >> 1;
}