Скажем, вы хотите вычислить pow(A, B)
Рассмотрим представление B
в базе 2:
B = b[n] * pow(2, n ) +
b[n-1] * pow(2, n - 1) +
...
b[2] * pow(2, 2 ) +
b[1] * pow(2, 1 ) +
b[0] * pow(2, 0 ) +
b[-1] * pow(2, -1 ) +
b[-2] * pow(2, -2 ) +
...
= sum(b[i] * pow(2, i))
, где b[x]
может быть 0
или 1
и pow(2, y)
- целое число, равное двум (т. е. 1
, 2
, 4
, 1/2
, 1/4
, 1/8
).
Тогда,
pow(A, B) = pow(A, sum(b[i] * pow(2, i)) = mul(pow(A, b[i] * pow(2, i)))
И так pow(A, B)
можно рассчитать, используя только умножения и операции с квадратным корнем