回 帖 发 新 帖 刷新版面

主题:求解````e=1/1!+1/2!+1/3!+..+1/n!的pascal程序和算法

e=1/1!+1/2!+1/3!+..+1/n!
     垃圾算法免提
   此处n<=10^1000
       也就是说n小于10的1000次方
  请各位大哥帮帮小弟

回复列表 (共18个回复)

11 楼


大概思想:


  begin
     readln(n)
 i:=1; t:=1;;
 repeat t:=t/i;                ←   对此进行
        i:=i+1;                ←     高精度
        e:=e+t                 ←       运算
  until i=n; ;
 write(e);
end.

12 楼

求e不存在垃圾算法以外的算法(也可能是人类尚未发现), 还是得用高精度一点一点来.

13 楼

我的一点想法
1.先乘以n的阶乘,算和,再除以n的阶乘,这样可以保证精确度
2,至于求和,建议使用1储存因子的办法
                     2.记录,渐乘

14 楼

楼主弄错了,n到1000,没有问题,使用高精度运算很快,但n要到10^1000就是不可能了,这是任何计算机都不可能完成的事,因为(10^1000)!达到你无法想象,呵呵。

如果n只是算到1000的话,只要使用普通的(垃圾的?)高精度乘除法就可以了,速度足够了;如果想快点可以使用好点的高精度乘法运算,如二分法,fft,ntt等。

如果想更快的话,请参见“http://enjoy-math.equn.com/Math/Mathematical/Binary_method.htm”

15 楼

[quote]求e不存在垃圾算法以外的算法(也可能是人类尚未发现),&nbsp;还是得用高精度一点一点来.[/quote]
还有个叫“二分法”的算法。

16 楼

我大一时的期末考试就考了这题

17 楼

这位兄弟,10^1000是多大你有概念吗!现有的数据类型是不可能完成的,除非你用分治法,把算出的结果用字符串存储,real类型是绝对存不下的!

18 楼

1.那个e的展开式有问题。应该是e = 1 + 1/1! + 1/2! + ...
2.至于计算方面,由于精度问题,n<=15可以单独计算,n>15就直接输出e的值即可。(exp(1.0)或者(1+1/n)^n,n->无穷,或者其他算法均可)

我来回复

您尚未登录,请登录后再回复。点此登录或注册