wayne 发表于 2010-5-20 10:33:52

36# chyanog

已经不行了。

再下去只能从数学和算法上分析了,即如何快速区分含9的和不含9的数。

wayne 发表于 2010-5-20 10:42:07

boost里面有一个tuple库,可以拿来一用,不知效率怎样

gxqcn 发表于 2010-5-20 10:42:08

37# gxqcn
我在32楼用的 也是这个方法~~
wayne 发表于 2010-5-20 10:25 http://bbs.emath.ac.cn/images/common/back.gif

我对Mathematica不熟,所以先前基本跳过阅读你们的代码。
现在看来,该段代码效率不及我的C代码,
因为它要调用大量的指数运算,而我的仅有加减运算。
因为我的是直接“构造”产生下一个不含“9”的数字,所以连判断指令都很少。

wayne 发表于 2010-5-20 10:45:16

没有指数运算啊,只是简单的生成固定数目的排列。

见:http://www.cppprog.com/boost_doc/libs/tuple/doc/tuple_users_guide.html

gxqcn 发表于 2010-5-20 10:48:21

HarmonicNumber

里的 10^n 不是指数运算吗?这需要几次乘法才能得到结果的。

gxqcn 发表于 2010-5-20 10:52:39

我在 38# 里的代码不调用任何第三方库,效率应该比调用boost更快。

wayne 发表于 2010-5-20 10:54:57

这个不参与循环的,对于特定的n,只算一次,目的是只是为了求出含有9的数的倒数和。

我的想法是这样的:

先计算不含9的情况:
对于特定的n,先生成{0,1,2,3,4,5,6,7,8}的n-1元子集的序列集合A,然后对集合A的每一个元素分别在前面附加1,2,3,4,5,6,7,8,即产生了所有的不含9的数

计算出了不含9的数的倒数和,接下来就是用调和数之和减去上面的结果

gxqcn 发表于 2010-5-20 11:00:32

如果只是少量的调用几次,倒也无妨。

我代码中有一段是自动得到 next 不含9的数字(v0),比较精巧,效率非常高,且不占用空间。

wayne 发表于 2010-5-20 11:02:51

HarmonicNumber函数效率很高的,算出1到10^10000的倒数和的500位结果,花时间几乎为0

23026.4281456053583730405210589337244784420570456236696839320847769106\
1096450030246703090899795927473016919247187011229341657621515484255410\
9499097864985461818365325583589289745775736622205124580542182148005662\
5125302366273045154560287588103960866361762520272264887372562293730707\
4870094288807360654647253620052353895541541190109365298825697036790433\
1799907471699893998960655786288041680824989345162695776338248172757040\
5216760179021640830384083498099891207302587321235398072737789023897058\
50933392342

gxqcn 发表于 2010-5-20 11:07:47

这个肯定是利用公式计算出来的(比如用欧拉定理),
但对于本题,没有连续大片的数字进行求倒数和,
所以再采用该函数反而有碍效率,我是这么认为的。
页: 1 2 3 4 [5] 6 7 8 9 10
查看完整版本: 当n=?时,含9的项之和开始大于不含9的项之和