Harmonic Number LightOJ - 1234 (暴力打表,区域保存)
2017-04-04 15:39
309 查看
In mathematics, the nth harmonic number is the sum of the reciprocals of the first n natural numbers。
Hn = 1 + 1 / 2 +1/3 +…… + 1/n
In this problem, you are given n, you have to find Hn.
Input
Input starts with an integer T (≤ 10000), denoting the number of test cases.
Each case starts with a line containing an integer n (1 ≤ n ≤ 108).
Output
For each case, print the case number and the nth harmonic number. Errors less than 10-8 will be ignored.
Sample Input
12
1
2
3
4
5
6
7
8
9
90000000
99999999
100000000
Sample Output
Case 1: 1
Case 2: 1.5
Case 3: 1.8333333333
Case 4: 2.0833333333
Case 5: 2.2833333333
Case 6: 2.450
Case 7: 2.5928571429
Case 8: 2.7178571429
Case 9: 2.8289682540
Case 10: 18.8925358988
Case 11: 18.9978964039
Case 12: 18.9978964139
暴力打表,这道题学会了按区域来保存的技巧,(把结果分成很多段,保存每段的第一个结果,搜索时找到对应区间再暴力该区间就可以)
Hn = 1 + 1 / 2 +1/3 +…… + 1/n
In this problem, you are given n, you have to find Hn.
Input
Input starts with an integer T (≤ 10000), denoting the number of test cases.
Each case starts with a line containing an integer n (1 ≤ n ≤ 108).
Output
For each case, print the case number and the nth harmonic number. Errors less than 10-8 will be ignored.
Sample Input
12
1
2
3
4
5
6
7
8
9
90000000
99999999
100000000
Sample Output
Case 1: 1
Case 2: 1.5
Case 3: 1.8333333333
Case 4: 2.0833333333
Case 5: 2.2833333333
Case 6: 2.450
Case 7: 2.5928571429
Case 8: 2.7178571429
Case 9: 2.8289682540
Case 10: 18.8925358988
Case 11: 18.9978964039
Case 12: 18.9978964139
暴力打表,这道题学会了按区域来保存的技巧,(把结果分成很多段,保存每段的第一个结果,搜索时找到对应区间再暴力该区间就可以)
#include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> #include<queue> #include<algorithm> #define ll long long #define inf 0x3f3f3f3f #define maxn 1e8+7 using namespace std; double a[2000100]; void Init() { a[0] = 0.0; a[1] = 1.0; double ans = 1; for( int i = 2; i < maxn; i ++) { ans += 1.0 / i; if( i % 50 == 0) a[i/50] = ans; } } int main() { int t,n; Init(); // for(int i = 0;i <= 10; i++) // printf("%lf\n",a[i]); scanf("%d",&t); for(int i = 1; i <= t;i ++) { scanf("%d",&n); int tmp = n / 50; double ans = a[tmp]; for(int j = tmp * 50 + 1; j <= n; j ++) { ans += 1.0 / j; } printf("Case %d: %.9lf\n",i,ans); } return 0; }
相关文章推荐
- 解题报告:Lightoj Harmonic Number 打表
- LightOJ 1234 Harmonic Number 分布式打表
- LightOJ - 1259 Goldbach`s Conjecture 素数打表+暴力(我见过的最快的打表姿势)
- LightOJ 1234 Harmonic Number (打表)
- lightoj1234 分段打表
- Harmonic Number 求Hn; Hn = 1 + 1/2 + 1/3 + ... + 1/n; (n<=1e8) T<=1e4; 精确到1e-8; 打表或者调和级数
- LightOJ 1234 - Harmonic Number (打表)
- Friends number NBUT - 1223 (暴力打表)
- LightOJ 1234 Harmonic Number(打表 + 技巧)
- Friends number NBUT - 1223 (暴力打表)
- 湖南大学ACM程序设计新生杯大赛(同步赛) D -Number 【打表+暴力】
- lightoj 1234 - Harmonic Number(技巧打表)
- kuangbin专题十四 LightOJ1234 打表
- HDU1394 Minimum Inversion Number [暴力] [线段树-单点更新]
- LightOJ - 1234 Harmonic Number【调和级数求和】
- 【LightOJ】1370 - Bi-shoe and Phi-shoe(欧拉函数,素数打表)
- Codeforces 387C George and Number 暴力
- 八数码第三境界——暴力反向BFS+康托展开判重+打表
- hdu 1331 (暴力打表)
- hdu 1443 Joseph+暴力打表