Как проверить, что больше: a ** b или b ** a для больших чисел? - PullRequest
3 голосов
/ 22 февраля 2020

Скажите, у меня есть два числа, a и b, такие что

1 <= a, b <= 10**9

Как я могу быстро проверить, что больше: a^b или b^a? Вычисление a**b непосредственно в Python слишком медленное.

Ответы [ 2 ]

4 голосов
/ 22 февраля 2020

Это скорее математический вопрос, чем вопрос Python, но вы можете использовать math.log, чтобы найти b * math.log(a) и a * math.log(b) и сравнить их.

import math
a = 10
b = 9

if b * math.log(a) > a * math.log(b):
   print("a^b is greater than b^a")
else if b * math.log(a)< a * math.log(b):
   print("a^b is smaller than b^a")
3 голосов
/ 22 февраля 2020

Если a,b > e, то вы можете сравнивать только a, b:

Рассмотрим: f(x) = x/ln x:

Тогда:

f'(x) = (ln(x)-1) / ln(x)^2, что положительно для x>e: поэтому f увеличивается при x> e .

Теперь, если a, b> e:

, если a>b <=> f(a) > f(b) <=> alog(b) > blog(a)

То же самое для a<b.

...