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

[擂台] 平方数数字和

[复制链接]
发表于 2008-7-10 21:07:12 | 显示全部楼层
另外,GxQ的代码完全不用事后计算平方阿 当时填充结果的时候就可以复制过去的 或者说,是否根本不用记录平方的根 就闷头搜索平方就可以了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-7-10 21:11:58 | 显示全部楼层
原帖由 无心人 于 2008-7-10 21:07 发表 另外,GxQ的代码完全不用事后计算平方阿 当时填充结果的时候就可以复制过去的
这个想法是不错,甚至可以考虑直接存储输出的字符串。 但我那个程序,主要是想直接存平方根,仅4Bytes,比较节省内存, 而后期展开的运算代价很小。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-7-10 21:15:32 | 显示全部楼层
超过2^32再存平方根就比较麻烦了阿 另外在这个程序里 内存节约的很 呵呵
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-7-10 21:44:53 | 显示全部楼层
157 28979978999958969889 20位内无更高的结果了 要对GxQ代码动大手术 去掉很多无用的代码 呵呵明天抽时间做下 呵呵,计算出145消耗的时间缩小到48秒 如果是GxQ机器还快吧
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #define TEN_POW2 100UL
  4. #define TEN_POW4 10000UL
  5. int main( void )
  6. {
  7. unsigned long table[ TEN_POW4 ];
  8. unsigned long mark[ 9*32 + 1 ];
  9. unsigned long value[ 8 ], delta[ 8 ];
  10. unsigned long * p = table;
  11. unsigned long i, j, k, m, s;
  12. long t;
  13. unsigned long i2, i3, i4, s2, s3;
  14. for ( i4 = 0; i4 < 10; ++i4 )
  15. {
  16. for ( i3 = 0; i3 < 10; ++i3 )
  17. {
  18. s3 = i4 + i3;
  19. for ( i2 = 0; i2 < 10; ++i2 )
  20. {
  21. s2 = s3 + i2;
  22. for ( i = 0; i < 10; ++i )
  23. {
  24. *p++ = s2 + i;
  25. }
  26. }
  27. }
  28. }
  29. for (i=0; i < 8; i ++)
  30. {
  31. value[i] = 0;
  32. delta[i] = 0;
  33. }
  34. for (i = 0; i < 9*32 + 1; i ++)
  35. mark[i] = 0;
  36. value[ 0 ] = 0;
  37. delta[ 0 ] = 1;
  38. m = 1;
  39. for ( ; ; )
  40. {
  41. s = 0;
  42. for ( i = 0; i < m; ++i )
  43. {
  44. value[ i ] += delta[ i ];
  45. if ( value[ i ] >= TEN_POW4 )
  46. {
  47. value[ i ] -= TEN_POW4;
  48. ++value[ i + 1 ];
  49. }
  50. s += table[ value[ i ] ];
  51. }
  52. if (value[m])
  53. {
  54. m++;
  55. s++;
  56. }
  57. if ( 0 == mark[ s ])
  58. {
  59. mark[s] = 1;
  60. printf("%d ", s);
  61. for (t=7;t>=0;t--)
  62. printf("%04d", value[t]);
  63. printf("\n");
  64. }
  65. if (m >= 9)
  66. break;
  67. delta[ 0 ] += 2;
  68. i = 0;
  69. while ( delta[ i ] >= TEN_POW4 )
  70. {
  71. delta[ i ] -= TEN_POW4;
  72. ++delta[ ++i ];
  73. }
  74. }
  75. s = 0;
  76. i = 0;
  77. printf( "\n" );
  78. return 0;
  79. }
复制代码
[ 本帖最后由 无心人 于 2008-7-11 07:37 编辑 ]
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-7-11 07:41:13 | 显示全部楼层
GxQ代码存在一个隐含的Bug 计算数位和没计算进位 就是说如果恰好进位到高位产生 他没加进位到s 结果10000会被计算到mark[0]中 但因为mark[0]不输出 所以看不到 呵呵
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-7-11 07:42:21 | 显示全部楼层
现在证明了猜想: 那么请问,是否对于每个9的倍数或模3余1的正整数,都存在一个完全平方数,数字之和是这个正整数 我们考虑 $(10^n-1)^2, (10^n-2)^2, (10^n-3)^2, (10^n-5)^2$ 它们的结果非常规律,在$n>=2$时,数字和分别为$9n,9n+1,9n+4,9n-2$ 所以我们只要在找到数字和为$1,4,7,9,10,13$的平方数,就完全证明了这个问题。

评分

参与人数 1威望 +2 收起 理由
gxqcn + 2 巧用构造证明存在性问题。

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-7-11 07:51:52 | 显示全部楼层
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-7-11 08:01:18 | 显示全部楼层
原帖由 无心人 于 2008-7-11 07:41 发表 GxQ代码存在一个隐含的Bug 计算数位和没计算进位 就是说如果恰好进位到高位产生 他没加进位到s 结果10000会被计算到mark[0]中 但因为mark[0]不输出 所以看不到 呵呵
mark[] 并未采用 10000 进制,应该没有你说的 bug 吧?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-7-11 08:09:37 | 显示全部楼层
呵呵 你看看你程序的mark的全部输出 而不是部分结果哦
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-7-11 08:40:06 | 显示全部楼层
153 00000000000005899989587897999889 151 00000000000006979497898999879969 154 00000000000008899988895999696889 157 00000000000028979978999958969889 160 00000000000078897999969769888996 162 00000000000087989899898866889889 163 00000000000199989299899788979969 166 00000000000449998999899988698769
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2024-11-15 01:37 , Processed in 0.037610 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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