找回密码
 欢迎注册
楼主: 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.         
  53.         if (value[m])
  54.         {
  55.           m++;
  56.           s++;
  57.         }

  58.         if ( 0 == mark[ s ])
  59.         {
  60.         mark[s] = 1;
  61.         printf("%d    ", s);
  62.         for (t=7;t>=0;t--)
  63.           printf("%04d", value[t]);
  64.         printf("\n");
  65.         }

  66.         if (m >= 9)
  67.            break;

  68.         delta[ 0 ] += 2;

  69.         i = 0;
  70.         while ( delta[ i ] >= TEN_POW4 )
  71.         {
  72.             delta[ i ] -= TEN_POW4;
  73.             ++delta[ ++i ];
  74.         }
  75.     }

  76.     s = 0;
  77.     i = 0;
  78.     printf( "\n" );

  79.     return 0;
  80. }
复制代码

[ 本帖最后由 无心人 于 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-4-20 21:53 , Processed in 0.050834 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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