【问题标题】:What is the fastest way to determine n^m = m^n if m != n?如果 m != n,确定 n^m = m^n 的最快方法是什么?
【发布时间】:2019-07-27 14:09:45
【问题描述】:

这是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)

但问题是如何记录如此庞大的数字?是否有其他检查相等性的方法?

【问题讨论】:

标签: c c++14 number-theory


【解决方案1】:

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

很容易看出 nm 都不能等于 1,因为它们必须不同且不能为空。让我们寻找 1 的解决方案。

正如您所说,nm = mn 意味着 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 个不同的数字 nm 使得 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    相关资源
    最近更新 更多