找回密码
 欢迎注册
楼主: 无心人

[讨论] 平方数问题一则

[复制链接]
 楼主| 发表于 2009-1-31 22:37:11 | 显示全部楼层


我那个算法还是做了点优化的
就是在判定是否平方数上

你用开方算是不对的

另外,穷举平方数用累加
计算数字和用Cache法
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-1 00:44:51 | 显示全部楼层
原帖由 无心人 于 2009-1-31 22:37 发表


我那个算法还是做了点优化的
就是在判定是否平方数上

你用开方算是不对的

另外,穷举平方数用累加
计算数字和用Cache法



开方算为什么不对啊

穷举平方数用累加
计算数字和用Cache法

请教这两招怎么用
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-2-1 08:46:46 | 显示全部楼层
因为,数字和的范围是很小的
比如24*9内的数字就能表示24位以内整数的数字和
只要预先把这个数字范围的数中的数字标上是否平方数就可以了

累加的算法看平方数数字和问题的GxQ的分析
具体是$(N + 1)^2 = N^2 + 2N + 1$

Cache法是预先计算4位数(0-9999)的数字和
然后,你用10000进制表示你的数字就可以节约分解数字的计算了

当然1000000进制也可以, 不过预先计算的工作量多些
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-1 18:38:04 | 显示全部楼层
再修改下:
  1. Clear[a, s, i, j, k, len, lst, squareLst];
  2. k = 1;
  3. a = 0;
  4. len = 0;
  5. squareLst = Table[i^2, {i, 1, 15}];(*初始化和为平方数的列表*)
  6. For[i = 1, i < 10^5 + 1, i++,
  7.     a += i + i - 1;(*使用累加(n + 1)^2 = n^2 + n + n + 1计算平方数*)
  8.     (*二重平方数*)
  9.     len = Length[IntegerDigits[a]];
  10.     lst = IntegerDigits[a];
  11.     s = 0;
  12.     (*计算数字和*)
  13.     For[j = 1, j < len + 1, j++,
  14.       s += Part[lst, j];
  15.       ];
  16.     If[MemberQ[squareLst, s],(*PutAppend[NO : k | a | s, "2SquareNum.txt"];*)
  17.       (*Print["NO.", k, "(", a, " ", s, ")"];*)k += 1, Continue[];];
  18.     ] // Timing
  19. Print["No.", k]
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-2-1 21:09:56 | 显示全部楼层


恐怕你要承担查询的代价
怎么不直接用数组保存是否平方的信息?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-2 22:10:19 | 显示全部楼层
无心人
怎么快速得到整数1~10000的各位数和?有没有直接的生成公式?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-2-2 22:11:44 | 显示全部楼层


s[1000*i + 100*j + 10*k + l] = i + j + k + l
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-2 22:19:23 | 显示全部楼层

原来是这样
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-2-2 22:26:10 | 显示全部楼层
不是我想出来的

要归功于几个大哥哥大姐姐
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-2 22:37:58 | 显示全部楼层
呵呵,知道是很有规律的,可是就是理不清
果然简洁,天气大好
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2024-5-19 17:01 , Processed in 0.042888 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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