chyanog
发表于 2010-5-19 14:56:55
本帖最后由 chyanog 于 2010-5-19 15:12 编辑
我用Wayne的思路改写如下,效率提高了些,但仍不快。function :=
Total /@ (1.0/
GatherBy,
MemberQ, 9] &])
function /@ Range // Timing
{63.344, {{2.71786, 0.111111}, {2.05399, 0.294418}, {1.81787,
0.489222}, {1.63336, 0.669671}, {1.46978, 0.832847}, {1.32278,
0.979807}, {1.1905, 1.11208}}}
gxqcn
发表于 2010-5-19 14:59:49
根据欧拉定理,所有的n位正整数的倒数和=ln(10^n)-ln(10^(n-1))=ln10=2.3025850929940456840179914546844
上述式子当n比较大时成立,也即 无心人 的 s0+s9
gxqcn
发表于 2010-5-19 15:02:15
奇怪,无心人 的 $s0+s9$ 怎么都那么大?
原来,他计算的分母起始值是“1”,而非楼主要求 $10^(n-1)$,所以得重算一遍啊。。。
chyanog
发表于 2010-5-19 15:14:34
无心人
发表于 2010-5-19 15:32:17
:)
搞错了啊
chyanog
发表于 2010-5-19 15:33:54
include9 :=
Select, MemberQ, 9] &]
diff :=
Total] - (HarmonicNumber -HarmonicNumber)
diff /@ Range // Timing
Out= {5.75, {-2.60675, -1.75957, -1.32865, -0.963693, -0.636937, \
-0.342977}}
无心人
发表于 2010-5-19 15:43:48
program inv9;
{$APPTYPE CONSOLE}
uses
SysUtils, math;
function is9(n: integer): boolean;
begin
is9 := false;
while n > 0 do
begin
if (n mod 10) = 9 then
begin
is9 := true;
break;
end;
n := n div 10;
end;
end;
var
n, m: integer;
s0, s9: double;
d: array of integer;
i: integer;
begin
d := 1;
for I := 1 to 9 do
begin
d := d * 10;
s0 := 0.0;
s9 := 0.0;
writeln('=============================');
writeln('位数 = ', i);
writeln(formatDateTime('当前时间: yy-mm-dd hh:nn:ss', now));
n := d;
while n <= d - 1 do
begin
if is9(n) then
s9 := s9 + 1 / n
else
s0 := s0 + 1 / n;
inc(n);
end;
writeln('s9 =', s9);
writeln('s0 =', s0);
writeln('s9 / s0 = ', s9 / s0);
writeln(formatDateTime('当前时间: yy-mm-dd hh:nn:ss', now));
end;
end.
修改了,下面是结果
无心人
发表于 2010-5-19 15:44:59
=============================
位数 = 1
当前时间: 10-05-19 15:42:39
s9 = 1.11111111111111E-0001
s0 = 2.71785714285714E+0000
s9 / s0 =4.08818805665061E-0002
当前时间: 10-05-19 15:42:39
=============================
位数 = 2
当前时间: 10-05-19 15:42:39
s9 = 2.94417641446448E-0001
s0 = 2.05399162222492E+0000
s9 / s0 =1.43339261105423E-0001
当前时间: 10-05-19 15:42:39
=============================
位数 = 3
当前时间: 10-05-19 15:42:39
s9 = 4.89221917709748E-0001
s0 = 1.81787142520098E+0000
s9 / s0 =2.69117997525959E-0001
当前时间: 10-05-19 15:42:39
=============================
位数 = 4
当前时间: 10-05-19 15:42:39
s9 = 6.69670962910865E-0001
s0 = 1.63336421258317E+0000
s9 / s0 =4.09994879128505E-0001
当前时间: 10-05-19 15:42:39
=============================
位数 = 5
当前时间: 10-05-19 15:42:39
s9 = 8.32846704579077E-0001
s0 = 1.46978338923997E+0000
s9 / s0 =5.66645881751150E-0001
当前时间: 10-05-19 15:42:39
=============================
位数 = 6
当前时间: 10-05-19 15:42:39
s9 = 9.79806535235522E-0001
s0 = 1.32278305776675E+0000
s9 / s0 =7.40715969623718E-0001
当前时间: 10-05-19 15:42:39
=============================
位数 = 7
当前时间: 10-05-19 15:42:39
s9 = 1.11208277030073E+0000
s0 = 1.19050277269338E+0000
s9 / s0 =9.34128668835241E-0001
当前时间: 10-05-19 15:42:39
=============================
位数 = 8
当前时间: 10-05-19 15:42:39
s9 = 1.23113282070628E+0000
s0 = 1.07145231728750E+0000
s9 / s0 =1.14903183356123E+0000
当前时间: 10-05-19 15:42:46
=============================
位数 = 9
当前时间: 10-05-19 15:42:46
s9 = 1.33827802796730E+0000
s0 = 9.64307069526340E-0001
s9 / s0 =1.38781314610153E+0000
当前时间: 10-05-19 15:43:57
无心人
发表于 2010-5-19 15:47:33
使用64位精度浮点(80位)的结果
=============================
位数 = 1
当前时间: 10-05-19 15:45:45
s9 = 1.11111111111111E-0001
s0 = 2.71785714285714E+0000
s9 / s0 =4.08818805665061E-0002
当前时间: 10-05-19 15:45:45
=============================
位数 = 2
当前时间: 10-05-19 15:45:45
s9 = 2.94417641446448E-0001
s0 = 2.05399162222492E+0000
s9 / s0 =1.43339261105423E-0001
当前时间: 10-05-19 15:45:45
=============================
位数 = 3
当前时间: 10-05-19 15:45:45
s9 = 4.89221917709748E-0001
s0 = 1.81787142520098E+0000
s9 / s0 =2.69117997525959E-0001
当前时间: 10-05-19 15:45:45
=============================
位数 = 4
当前时间: 10-05-19 15:45:45
s9 = 6.69670962910866E-0001
s0 = 1.63336421258317E+0000
s9 / s0 =4.09994879128506E-0001
当前时间: 10-05-19 15:45:45
=============================
位数 = 5
当前时间: 10-05-19 15:45:45
s9 = 8.32846704579074E-0001
s0 = 1.46978338923997E+0000
s9 / s0 =5.66645881751147E-0001
当前时间: 10-05-19 15:45:45
=============================
位数 = 6
当前时间: 10-05-19 15:45:45
s9 = 9.79806535235526E-0001
s0 = 1.32278305776677E+0000
s9 / s0 =7.40715969623709E-0001
当前时间: 10-05-19 15:45:45
=============================
位数 = 7
当前时间: 10-05-19 15:45:45
s9 = 1.11208277030072E+0000
s0 = 1.19050277269341E+0000
s9 / s0 =9.34128668835207E-0001
当前时间: 10-05-19 15:45:45
=============================
位数 = 8
当前时间: 10-05-19 15:45:45
s9 = 1.23113282070638E+0000
s0 = 1.07145231728766E+0000
s9 / s0 =1.14903183356115E+0000
当前时间: 10-05-19 15:45:52
=============================
位数 = 9
当前时间: 10-05-19 15:45:52
s9 = 1.33827802796742E+0000
s0 = 9.64307069526623E-0001
s9 / s0 =1.38781314610125E+0000
当前时间: 10-05-19 15:47:03
chyanog
发表于 2010-5-19 15:47:46
25# 无心人
没关系的,再接再厉啊,相信这题肯定会被完美解决的,这里可真是高手云集。
页:
1
2
[3]
4
5
6
7
8
9
10