已知Sn=1+1-2+1-3+...+1-n,对于任意一个整数K,当n满足够大的时候,Sn-K

博客探讨了如何利用数学中的欧拉公式1+1/2+1/3+…+1/n=ln(n+1)+C来解决对于任意整数K,当n足够大时Sn>K的问题。文章指出,由于时间限制,不能采用n+=1/n的方式,而是借助Java的Math.log()函数来实现。通过代码实现,得出结论。

已知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+1/9+...+1/n^2) - 1/3*(1+1/8+1/27+...+1/n^3) + ...... 后面那一串和都是收敛的。
    ④:我们可以定义 1+1/2+1/3+1/4+...1/n = ln(n+1) + r Euler近似地计算了r的值,约为0.577218。 这个数字就是后来称作的欧拉常数。

有了这些我们结合java中的Math数学函数API:Math.log()

代码:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int k = sc.nextInt();
        //定义常量
        final double R = 0.577218;
        if (k <= 15 && k > 1) {
            int n = 1;
            long start = System.currentTimeMillis();
            while (true) {
                double log = Math.log(n + 1) + R;
                if (log > k) {
                    long end = System.currentTimeMillis();
                    System.out.println("时间:"+end - start);
                    break;
                } else {
                    n++;
                }
            }
            System.out.print(n + 1);
        }
    }
}

结果:

时间:229
12367

总结:

主要是结合数学和JavaAPI进行编程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值