Для O (n) вы можете просто выполнить итерацию от 0 до n, проверяя, является ли число куби c root, которое вы ищете. (Это работает только с целыми числами)
int cubic(int n){
for(int i=0;i<=n;i++)
if(i*i*i==n)
return i;
return -1; // cubic root doesn't exist.
}
Для O (logn) вы можете выполнить двоичный поиск от 0 до n:
double error=0.00000001;
double cubic(double n){
double l=0, r=n, m=(r+l)/2;
while (abs(n-m*m*m)>error){ // if difference between m^3 and n is not satisfactory
m=(r+l)/2;
if(m*m*m<n) // if m^3 < n, then the root is definitely greater then m, so we move the left border
l=m;
else // otherwise, move the right border
r=m;
}
return m;
}