题目地址:
https://www.luogu.com.cn/problem/P1035
题目描述:
已知:
S
n
=
1
+
1
2
+
1
3
+
…
+
1
n
S_n= 1+\frac{1}{2}+\frac{1}{3}+…+\frac{1}{n}
Sn=1+21+31+…+n1。显然对于任意一个整数
k
k
k,当
n
n
n足够大的时候,
S
n
>
k
S_n>k
Sn>k。现给出一个整数
k
k
k,要求计算出一个最小的
n
n
n,使得
S
n
>
k
S_n>k
Sn>k。
输入格式:
一个正整数
k
k
k。
输出格式:
一个正整数
n
n
n。
数据范围:
对于
100
%
100\%
100%的数据,
1
≤
k
≤
15
1≤k≤15
1≤k≤15。
代码如下:
#include <iostream>
using namespace std;
double s;
int k;
int main() {
cin >> k;
for (int i = 1; ; i++) {
s += 1.0 / i;
if (s > k) {
printf("%d\n", i);
break;
}
}
return 0;
}
时间复杂度 O ( e k ) O(e^k) O(ek)( ∑ i = 1 n 1 i ∼ ln n \sum_{i=1}^{n}\frac{1}{i}\sim \ln n ∑i=1ni1∼lnn),空间 O ( 1 ) O(1) O(1)。