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

[讨论] 平方数问题一则

[复制链接]
 楼主| 发表于 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-11-23 08:23 , Processed in 0.024226 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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