avatar
fireworks99
keep hungry keep foolish

LightOJ 1234 Harmonic Number调和数

Description

Harmonic Number

欧拉给出了Harmonic数近似公式(n较大时):

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

其中C为欧拉常数约等于0.57721566490153286060651209

Code

#include <set>
#include <map>
#include <stack>
#include <queue>
#include <ctime>
#include <cmath>
#include <cstdio>
#include <vector>
#include <bitset>
#include <string>
#include <cstring>
#include <sstream>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <functional>
#define eps 1e-8
#define PI acos(-1.0)
#define ll long long
using namespace std;
const int mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;
const double Euler = 0.57721566490153286060651209;
#define Close ios::sync_with_stdio(false);

double a[10005];

int main()
{
    for(int i = 1; i <= 10000; ++i)
        a[i] = a[i - 1] + 1.0 / i;
    int t, n, cnt = 1;
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d", &n);
        if(n <= 10000)
            printf("Case %d: %.10f\n", cnt++, a[n]);
        else
        {
            double ans = log(n) + 1.0 / (2 * n) + Euler;
            printf("Case %d: %.10f\n", cnt++, ans);
        }
    }
    return 0;
}
Site by Baole Zhao | Powered by Hexo | theme PreciousJoy