LightOJ 1234 Harmonic Number调和数
Description
欧拉给出了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;
}