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

时间:2019-07-27 14:09:45

标签: c c++14 number-theory

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

404 page not found

我尝试过的是

1 <= m, n <= 10^10000

但是问题是如何取这么多的日志?有没有其他检查相等性的方法?

1 个答案:

答案 0 :(得分:1)

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

很容易看到 n m 都不能等于1,因为它们必须不同并且不能为null。让我们寻找 1

的解决方案。

正如您正确指出的那样, n m = m n 表示 m.log(n)= n.log(m )

因此,我们正在寻找 m / log(m)= n / log(n) 1 的解决方案。

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

其导数为 f'(x)=(log(x)-1)/ log(x) 2

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

任何2个不同的数字 n m ,使得 f(n)= f(m),n 必须使得 1 m> 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;
}