1. 程式人生 > >LightOJ 1234(調和級數、有通項公式的發散數列求和)

LightOJ 1234(調和級數、有通項公式的發散數列求和)

調和級數求和(1/1+1/2+1/3+……..+1/n)

可用於大數有通項公式的求和計算

利用分組來平衡記憶體和時間

#include <algorithm>
#include <cassert>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <stack>
#include <set>
#include <string>
#include <ctime> using namespace std; #define ll long long const int MAXN = 100000000+100; const int mod = 100;//組距 double a[MAXN/mod];//儲存每組開頭的數的大小 void Init() { double tmp=1.0; a[0]=0.0; for(int i=2;i<=MAXN;i++) { tmp+=1.0/i; if(i%mod==0) { a[i/mod]=tmp; } } } int
main() { // freopen("in.txt","r",stdin); // freopen("out.txt","w",stdout); int T; scanf("%d",&T); Init(); for(int cas=1; cas<=T; cas++) { int n; scanf("%d",&n); int p=n/mod; double ans=a[p]; for(int i=p*mod+1;i<=n;i++) { ans+=1.0
/i; } printf("Case %d: %.10lf\n",cas,ans); } return 0; }