Даже если мы организуем возведение в степень как тупое многократное умножение, мы получим O(n). Так что или ты что-то напутал, или дело там не в возведении в степень.
а откуда такая тупая реализация? ? ?
в стандартной библиотеке pow только плавающая, время вообще константное, как там реализовано - не знаю, наверное через логарифм и экспоненту.
pow(x, y) эквивалентно exp(y*ln(x))
если хотите сами сделать чисто целочисленный алгоритм - и тут можно неслабо соптимизировать, представив степень в двоичном виде и посчитав только нужные степени. Трудоемкость будет порядка логарифма от степени (номера старшего ненулевого бита)
типа так (только для положительных! ) :
unsigned ipow(unsigned a, unsigned b){
unsigned res = 1;
while(b){
if(b&1)
res *=a;
a *= a;
b = b >> 1;
}
return res;
}
Не совсем понятно, что Вам нужно.
Если нужно решить задачу возведения в степень без применения функции pow - используйте логарифмы: a^n = ln(n*exp(a)).
Или же создайте функцию, в которой организован цикл возведения в степень каким либо хитрым способом (из очень много) .
Пишите в комментариях конкретную задачу, я Вам ее реализую на С++ без использования pow.