zoukankan      html  css  js  c++  java
  • 【XSY2962】作业 数学

    题目描述

      有一个递推式:

    [egin{align} f_0&=1-frac{1}{e}\ f_n&=1-nf_{i-1} end{align} ]

      求 (f_n)

      (nleq 10000)

    题解

      如果直接按照式子推的话会爆精度,因为误差是阶乘级别放大的。

      但是我们可以逆过来递推。

    [egin{align} f_infty&=0\ f_{n-1}&=frac{1-f_n}{n} end{align} ]

      这样误差就是不断缩小的。

      或者你直接推式子也是可以的。

    [egin{align} f_n&=n!sum_{i=0}^nfrac{{(-1)}^{n-i}}{i!}-n!{(-1)}^nfrac{1}{e}\ &=n!sum_{i=0}^nfrac{{(-1)}^{n-i}}{i!}-n!{(-1)}^nsum_{igeq 0}frac{{(-1)}^i}{i!}\ &=n!{(-1)}^nsum_{i>n}frac{{(-1)}^i}{i!}\ end{align} ]

      然后算个一万项就行了。

    代码

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    int n;
    int main()
    {
    	scanf("%d",&n);
    	double ans=0,s=1;
    	for(int i=n+1;i<=20000;i++)
    	{
    		s/=i;
    		ans-=(i&1?-1:1)*s;
    	}
    	ans*=(n&1?-1:1);
    	printf("%.4lf
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    php实现频率限制
    手机号打码
    qxx项目大文件上传
    502错误
    mac 安装phpunit
    文件权限问题
    无题
    php安装redis扩展全
    linux中whereis、which、find、location的区别和用法
    php安装redis扩展
  • 原文地址:https://www.cnblogs.com/ywwyww/p/9100158.html
Copyright © 2011-2022 走看看