给定数字X,找到数n,使得n lg的上限n = X.

时间:2015-01-19 16:05:08

标签: c algorithm math

我迷失在试图找出公式给我正确的答案。

假设X = 10,我必须找到一个数字n,使得天花板是天花板[n lg n]

因此,对于X = 10,经过反复试验后,我得到4.56 lg 4.56。

3 个答案:

答案 0 :(得分:1)

您可以根据Lambert W function解决此问题。你想要的数字是log(W(x)),假设你的对数是自然的。

答案 1 :(得分:1)

@dmuir在正确的轨道上,您可以使用Lambert W function来解决n * log N = X.例如使用身份

W(n * log n)= log n

你可以推导出n = e W(X)

对于X = 10,W(X)= 1.745528002,所以n = e 1.745528002 = 5.72892556

如果按lg n表示日志到基数2那么上面的内容就变成了

n = e W(X * log(2)) = e W(X * 0.69314718055)

请注意,Lambert W函数不能用基本函数表示。因此像@Juan Lopes这样的解决方案可能同样有效。

答案 2 :(得分:0)

我不知道这个封闭的公式,但是你不能做一个像这样的简单二进制搜索吗?

double solve(double a, double b, double x) {
    if (abs(a-b) < 1e-6) return a;
    double n = (a+b)/2;
    if (n*log2(n) > x)
        return solve(a, n, x);
    else
        return solve(n, b, x);
}    

double solve(double x) {
    return solve(0, x, x);
}