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

[讨论] 回文数通项公式

[复制链接]
 楼主| 发表于 2010-8-27 15:41:34 | 显示全部楼层
20# wayne
你的C代码未必比下面的快啊,

  1. #include<stdio.h>
  2. int main(){
  3.         int i,j,k;
  4.         for(i=1;i<10;i++)
  5.         for(j=0;j<10;j++)
  6.         for(k=0;k<10;k++)
  7.         printf("%d\t",100001*i+10010*j+1100*k);
  8. }
复制代码
我总感觉你的方法这次又涉及到了取余运算,而取余的效率应该不及纯粹的加法、乘法
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-8-27 16:13:01 | 显示全部楼层
21# chyanog

如果要进一步追求效率,可以将所有的乘法(*)换成递增(+=)。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-8-27 16:25:08 | 显示全部楼层
22# gxqcn
多谢郭大侠关注。这我可不会了,我对C还算不上了解皮毛,业余的很,只是课外看些书了解下简单语法而已。站长对回文数通项公式求法可有什么建议?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-8-27 16:37:17 | 显示全部楼层
建议谈不上,只是如果为应用的话,应以简洁为美,用你在 21# 所给的表达式足矣。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-8-27 16:51:28 | 显示全部楼层
23# chyanog
  1. #include<stdio.h>
  2. int main(){
  3.         int i,j,k,a=100001;
  4.         for(i=1;i<10;i++){
  5.         for(j=0;j<10;j++){
  6.         for(k=0;k<10;k++){
  7.         printf("%d\t",a);
  8.                 a+=1100;}
  9.                 a-=990;}
  10.                 a-=99;}
  11. }
复制代码
不过,for太多了,俺不喜欢
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-8-27 17:20:39 | 显示全部楼层
建议谈不上,只是如果为应用的话,应以简洁为美,用你在 21# 所给的表达式足矣。
gxqcn 发表于 2010-8-27 16:37

这个优化编译器能够自动做到
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-8-27 17:39:16 | 显示全部楼层
现在常用的IDE是C-Free,以前用的是Dev-C++,相比之下前者更方便点儿,不过根据我的测试,同一个C程序,前者总是比后者稍慢。似乎他们都是MinGW
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-8-27 18:22:46 | 显示全部楼层
发现一个恒等式:

前提是 x 属于自然数,算是Floor[(x+9)/10]的展开。
不知道正确否,大家可以验证。

  1. Table[Floor[(x + 9)/10] -
  2.     1/100 (45 + 10 x - 5 Cos[1/5 \[Pi] (2 - 9 x)] -
  3.        5 Sqrt[5] Cos[1/5 \[Pi] (2 - 9 x)] +
  4.        5 Cos[1/5 \[Pi] (1 - 7 x)] -
  5.        5 Sqrt[5] Cos[1/5 \[Pi] (1 - 7 x)] - 5 Cos[\[Pi] x] -
  6.        5 Cos[1/5 \[Pi] (2 + x)] - 5 Sqrt[5] Cos[1/5 \[Pi] (2 + x)] +
  7.        5 Cos[1/5 \[Pi] (1 + 3 x)] -
  8.        5 Sqrt[5] Cos[1/5 \[Pi] (1 + 3 x)] -
  9.        Sqrt[10 (5 + Sqrt[5])] Sin[1/5 \[Pi] (1 - 2 x)] -
  10.        Sqrt[10 (5 - Sqrt[5])] Sin[2/5 \[Pi] (1 - 2 x)] -
  11.        Sqrt[10 (5 - Sqrt[5])] Sin[2/5 \[Pi] (1 + 3 x)] -
  12.        Sqrt[10 (5 + Sqrt[5])] Sin[1/5 \[Pi] (1 + 8 x)]), {x, 1000}] //
  13.    FullSimplify // Union
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-8-28 16:26:12 | 显示全部楼层
我在一楼贴的式子在Mathematica里已经不能再化简了,后来我又自定义三角函数和差化积规则来化简,终于看上去更简洁一些,尽管式子依旧有些长。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-8-31 14:49:46 | 显示全部楼层
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2024-5-19 01:33 , Processed in 0.043350 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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