题意明确,第一种方法,模拟:
时间复杂度O(n)
空间复杂度O(1)
参考代码如下:

long long solve(int k)
{
    long long n = 0;
    for (double Sn = 0; Sn <= k; ++n, Sn += 1.0 / n)
        ;
    return n;
}

不过过不了第十个测试用例,TLE。
使用数论可以进一步优化,将时间复杂度优化到接近log级别
参考代码如下

long long solve(int k)
{
    return floor(exp(k-0.5772156649) + 0.5);
}

是因为,本题求和为调和级数,调和级数(即f(n))至今没有一个完全正确的公式,但欧拉给出过一个近似公式:(n很大时)

f(n)≈ln(n)+C+1/2*n

欧拉常数值:C≈0.57721566490153286060651209,
所以,直接用就可以了。