主题:求解````e=1/1!+1/2!+1/3!+..+1/n!的pascal程序和算法
star3015
[专家分:0] 发布于 2006-08-17 15:55:00
e=1/1!+1/2!+1/3!+..+1/n!
垃圾算法免提
此处n<=10^1000
也就是说n小于10的1000次方
请各位大哥帮帮小弟
回复列表 (共18个回复)
11 楼
interegg [专家分:80] 发布于 2006-09-09 21:46:00
大概思想:
begin
readln(n)
i:=1; t:=1;;
repeat t:=t/i; ← 对此进行
i:=i+1; ← 高精度
e:=e+t ← 运算
until i=n; ;
write(e);
end.
12 楼
maxumi [专家分:2200] 发布于 2006-09-22 09:37:00
求e不存在垃圾算法以外的算法(也可能是人类尚未发现), 还是得用高精度一点一点来.
13 楼
waglongjuanfeng [专家分:90] 发布于 2006-10-05 02:35:00
我的一点想法
1.先乘以n的阶乘,算和,再除以n的阶乘,这样可以保证精确度
2,至于求和,建议使用1储存因子的办法
2.记录,渐乘
14 楼
boxertony [专家分:23030] 发布于 2006-10-07 11:32:00
楼主弄错了,n到1000,没有问题,使用高精度运算很快,但n要到10^1000就是不可能了,这是任何计算机都不可能完成的事,因为(10^1000)!达到你无法想象,呵呵。
如果n只是算到1000的话,只要使用普通的(垃圾的?)高精度乘除法就可以了,速度足够了;如果想快点可以使用好点的高精度乘法运算,如二分法,fft,ntt等。
如果想更快的话,请参见“http://enjoy-math.equn.com/Math/Mathematical/Binary_method.htm”
15 楼
boxertony [专家分:23030] 发布于 2006-10-07 11:35:00
[quote]求e不存在垃圾算法以外的算法(也可能是人类尚未发现), 还是得用高精度一点一点来.[/quote]
还有个叫“二分法”的算法。
16 楼
relative660 [专家分:260] 发布于 2006-10-08 19:59:00
我大一时的期末考试就考了这题
17 楼
relative660 [专家分:260] 发布于 2006-10-08 20:01:00
这位兄弟,10^1000是多大你有概念吗!现有的数据类型是不可能完成的,除非你用分治法,把算出的结果用字符串存储,real类型是绝对存不下的!
18 楼
FancyMouse [专家分:13680] 发布于 2006-10-13 14:30:00
1.那个e的展开式有问题。应该是e = 1 + 1/1! + 1/2! + ...
2.至于计算方面,由于精度问题,n<=15可以单独计算,n>15就直接输出e的值即可。(exp(1.0)或者(1+1/n)^n,n->无穷,或者其他算法均可)
我来回复