PDF (English) | Statistics | Forum |
Time Limit: 3 second(s) | Memory Limit: 32 MB |
In mathematics, the nth harmonic number is the sum of the reciprocals of the first n natural numbers:
In this problem, you are given n, you have to find Hn.
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).
For each case, print the case number and the nth harmonic number. Errors less than 10-8 will be ignored.
Sample Input |
Output for Sample Input |
12 1 2 3 4 5 6 7 8 9 90000000 99999999 100000000 |
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 |
/**
调和级数和打表,但是因为n是1e8次方,所以想到分区域打表.
每100个打一个表,
于是对于在最后一个区域中时,然后询问时就是在这个基础上最多在查100个数.
*/
#include
using namespace std;
const int maxn = 1e6+10;
double arr[maxn];
void init() {
arr[0] = 0;
double temp = 0;
for(int i=1;i
当n > 1e6时可以用公式:
调和级数求和的式子 趋近值为 :
h[n]=(log(n * 1.0) + log(n + 1.0)/2.0 + 1.0/(6.0 * n * (n + 1)) - 1.0 / (30.0 * n * n * (n + 1) * (n + 1)) + r。
其中r为欧拉常数:
r=0.57721566490153286060651209008240243104215933593992.
我记得 一般为 h[n] = In(n+1) + r ,但是这里的精度不够.上面的好像更精确点,
据说是来自https://en.wikipedia.org/wiki/Euler%E2%80%93Mascheroni_constant
代码
#include
using namespace std;
const int maxn = 1e6+10;
const double r = 0.57721566490153286060651209008240243104215933593992;
double arr[maxn];
void init() {
arr[0] = 0;
double temp = 0;
for(int i=1;i