如果 m != n,确定 n^m = m^n 的最快方法是什么?

What is the fastest way to determine n^m = m^n if m != n?

这是 hackerearth 练习部分的问题之一。我们需要确定是否 m^n = n^m。当 n = m 时这是微不足道的,所以我们关注 m != n.

1 <= m, n <= 10^10000

我试过的是

n^m = m^n  implies
m*log(n) = n*log(m)

但是问题是,这么大的log怎么取呢?是否有其他检查相等性的方法?

让我们做一些数学运算来确定如何编程解决方案:

很容易看出,nm都不能等于1,因为它们一定不同,不能为空。让我们寻找 1 < n < m.

的解决方案

如您正确所述,nm = mn 意味着 m.log(n) = n.log(m)

因此我们正在寻找 m / log(m) = n / log(n)1 < n < m[=58= 的解决方案].

我们可以研究函数f(x) = x / log(x) for x > 1:

它的导数是f'(x) = (log(x) - 1) / log(x)2

导数在 x = e 处有一个零,f(x)x 之间严格递减= 1x = e 并严格从 x = e 一直增加到无穷大。

任何 2 个不同的数字 nm 使得 f(n) = f(m), n < m 必须满足 1 < n < em > e

n唯一可能的整数值是2,恰好是m对应值为4的解, 1到e区间没有其他整数。

因此唯一的解决方案是 n=2, m=4 和 n=4, m=2

这里是一个输出所有可能结果的C程序:

#include <stdio.h>
int main() {
    printf("2 4\n");
    printf("4 2\n");
    return 0;
}