主要介绍欧拉常数。
当我们需要计算调和级数,范围特别大的时候,可以使用它。
它的定义是,即一坨调和级数减去一个ln。
欧拉发现这是个常数,大概在0.57721 56649 01532 86060 左右。
所以调和级数就是欧拉常数+ln(n)。但这个公式对于小的n不够精确。小的直接打表。大的才用。
计算欧拉常数根据精度要求取个大一点的就行了。
#include<bits/stdc++.h>
using namespace std;
#define in read()
int in{
int cnt=0,f=1;char ch=0;
while(!isdigit(ch)){
ch=getchar();if(ch=='-')f=-1;
}
while(isdigit(ch)){
cnt=cnt*10+ch-48;
ch=getchar();
}return cnt*f;
}
int n;
double ans,cnt;
signed main(){
cin>>n;--n;
if(n==0){
cout<<"0.00000";return 0;
}
if(n<=1000000){
for(int i=1;i<=n;i++)ans=ans+1.0/i;ans++;
}else{
for(int i=1;i<=10000000;i++)cnt+=1.0/i;
ans=1.0+cnt-log(10000000)+log(n);
}printf("%.5lf",ans);
return 0;
}