已知Sn=1+1/2+1/3+…+1/n,对于任意一个整数K,当n满足够大的时候,Sn>K
标签(空格分隔): 数据结构和算法
题目:
已知Sn=1+1/2+1/3+...+1/n,对于任意一个整数K,当n满足够大的时候,Sn>K。
给出一个整数K(1<=K<=15),要求计算出一个最大的N,使得Sn>K。
样例
输入:int K 10
输出:12367
说明:题目可以使用多种语言。这里使用JAVA。
由于时间限制,所以使用while n+=1/n,不可行。所以我们可以从Sn=1+1/2+1/3+…+1/n下手。
在数学中“欧拉公式”给出:
1+1/2+1/3+……+1/n=ln(n+1)+C,C为欧拉常数 数值是0.5772…….
Euler(欧拉)在1734年,利用牛顿的成果,首先获得了调和级数有限多项和的值。
结果是: 1+1/2+1/3+1/4+...+1/n= ln(n+1)+r(r为常量) 他的证明是这样的:
根据牛顿的幂级数有: ln(1+1/x) = 1/x - 1/2x^2 + 1/3x^3 - ...
①: 1/x = ln((x+1)/x) + 1/2x^2 - 1/3x^3 + ...
②:代入x=1,2,...,n,就得到 1/1 = ln(2) + 1/2 - 1/3 + 1/4 -1/5 + ... 1/2 = ln(3/2) + 1/2*4 - 1/3*8 + 1/4*16 - ... ...... 1/n = ln((n+1)/n) + 1/2n^2 - 1/3n^3 + ...
③:相加,就得到: 1+1/2+1/3+1/4+...1/n = ln(n+1) + 1/2*(1+1/4