找回密码
 欢迎注册
楼主: chyanog

[提问] 当n=?时,含9的项之和开始大于不含9的项之和

[复制链接]
发表于 2010-5-20 11:13:11 | 显示全部楼层
呵呵,我的占用了很多空间,我正在编译boost库,打算用用tuple,看看效果如何

这么多高级语言都有tuple函数,应该有其存在的理由吧,唯独C++ 没有。。。。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-20 11:17:04 | 显示全部楼层
查了文档,tuple库只是一堆头文件,不用编译即可拿来使用
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-20 11:29:32 | 显示全部楼层
库只是为了减少重复劳动,简单的问题最好是直接解决。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-20 11:49:21 | 显示全部楼层
嗯,老大教训的对。

我最近在学STL和boost呢,这不就把问题往这边想吗
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-20 12:00:24 | 显示全部楼层
千万别说“教训”,我们只是在交流看法。

不管什么库,也是靠人写的,优秀的库不外乎用C及汇编,
所以不存在用库就更快的说法,
除非是库所用算法比自己写的更优秀。

学习STL和boost还是很不错的,
通过阅读大师级的源代码,
对提高自身算法及编码水平是很有帮助的。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-20 20:23:48 | 显示全部楼层
38# gxqcn

再次小优化:
  1. #include <stdio.h>
  2. #include <time.h>

  3. int main(int argc, char* argv[])
  4. {
  5.     unsigned long n, i, v0, v9, d[9], m[9];
  6.     double s0, s9;
  7.     time_t sec;

  8.     d[0] = 1;
  9.     m[0] = 9;
  10.     for ( i=1; i<9; ++i )
  11.     {
  12.         d[i] = d[i-1] * 10;
  13.         m[i] = 9;
  14.     }

  15.     v0 = 1;
  16.     v9 = 0;
  17.     for ( n=1; 10!=n; ++n )
  18.     {
  19.         s9 = s0 = 0.0;
  20.         --m[n-1];

  21.         do
  22.         {
  23.             // v9: 下一个含有9的数字
  24.             v9 += 9;
  25.             do
  26.             {
  27.                 s0 += 1.0 / v0;
  28.             } while ( v9 != ++v0 );

  29.             // v0: 下一个不含有9的数字
  30.             for ( ++v0, i=1; n!=i && 0==--m[i]; ++i )
  31.             {
  32.                 v0 += d[i];
  33.                 m[i] = 9;
  34.             }
  35.             do
  36.             {
  37.                 s9 += 1.0 / v9;
  38.             } while ( v0 != ++v9 );

  39.         } while ( n != i );

  40.         time(&sec);

  41.         printf( "n = %u\t%.24s\n", n, ctime(&sec) );
  42.         printf( "s0 = %.15f\ns9 = %.15f\ns0/s9 = %.15f\ns0+s9 = %.15f\n\n", s0, s9, s0/s9, s0+s9 );
  43.     }

  44.     return 0;
  45. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-5-20 20:43:30 | 显示全部楼层
41# wayne

  1. f[x_] :=
  2. Module[{temp = Tuples[Range[0, 8], x - 1], t},
  3.   {t = Sum[Total[1.0/(i*10^(x - 1) + FromDigits /@ temp)], {i, 8}],
  4.    HarmonicNumber[10^x - 1.0] - HarmonicNumber[10^(x - 1) - 1.0] - t
  5.    }
  6.   ]
  7. 或(*Total@Sum[1.0/(i*10^(x-1)+FromDigits/@temp),{i,8}]*)
复制代码
我用你的思路又改写了一下,效率稍有提高,估计是用加法和乘法替代纯函数调用可以更快的缘故吧。

评分

参与人数 1金币 +8 鲜花 +8 收起 理由
wayne + 8 + 8 迟到了啊,呵呵

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-21 08:32:44 | 显示全部楼层


结果和我的不一样啊
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-21 08:35:07 | 显示全部楼层
看错了,一样的
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-21 08:46:18 | 显示全部楼层
另外一种思路就是,用cache保存预判信息

不知道,谁写一下,应该速度比较快吧
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-5-3 21:15 , Processed in 0.044864 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表