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