Як обчислити x^n швидше ніж ? Наприклад,
Можна помітити що x^{2n} = (x^2)^n, наприклад x^{100} = (x^2)^{50}.
Для непарних степенів скористаємося формулою x^{2n+1} = x \cdot x^{2n}, наприклад x^{11} = x \cdot x^{10}.
Наступна рекурентна формула дає нам розв'язок за O(log_2n):
При ітеративній реалізації слід окремо обробити випадок x = 1, — велике ціле число. Наприклад, при x = 1, n = 10^{18} для обчислення x^n слід виконати 10^{18} ітерацій, що призведе до Time Limit.
Реалізація алгоритму
Функція f обчислює значення x^n.
long long f(long long x, long long n)
{
if (n == 0) return 1;
if (n % 2 == 0) return f(x * x, n / 2);
return x * f(x, n - 1);
}Основна частина програми. Читаємо вхідні дані.
scanf("%lld %lld",&x,&n);Обчислюємо та виводимо відповідь x^n.
res = f(x,n);
printf("%lld\n",res);