Вопрос предполагает, что есть способ написать функцию:
int f(int x) { return pow(x, 30); }
, используя только умножения.
Фактически одним из способов будет следующее:
int f(int x)
{
int y = 1;
for (int i = 0; i < 30; i++)
y *= x;
return y;
}
Это использует 30 умножений.
Однако учтите это:
int f(int x)
{
int z = x*x;
int y = 1;
for (int i = 0; i < 15; i++)
y *= z;
return y;
}
Это использует 16 умножений.
Таким образом, вопрос заключается в том, каково минимальное количество умноженийвозможно?
Вот 6 умножений, и, вероятно, идеальное решение для интервьюеров:
int f(int x)
{
x_3 = x * x * x;
x_6 = x_3 * x_3;
x_12 = x_6 * x_6
x_24 = x_12 * x_12
return x_24 * x_6
}
Это скорее головоломка, чем проблема программирования.Реальная степенная функция не использует умножение (или, по крайней мере, не так, как подразумевается в вопросе)