Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
12
返回列表 发新帖
楼主: grf1973

[VBA] 用VBA解欧拉计划题目(74)--数字阶乘链

[复制链接]
发表于 2018-1-4 13:06 | 显示全部楼层
输出cnt应该都明白吧。
回复

使用道具 举报

发表于 2018-1-4 13:28 | 显示全部楼层
其它考虑过的投机取巧的方法,或许会对各位有所启发,我是没有达成。
前提:已知60是最大长度,所以只要有某个数字排在另外一个数字后面时,这个数字就可以排除,后面不再判断它了。
想法1:
  1、将1~10^6的阶乘结果存入字典,只有4014个结果,那么这4014个结果都是前面数字的阶乘结果,可以排除;
  2、再对4014个结果进行阶乘,所得到的结果再排除;
  3、以上运行60次,除了排除的数其他都是最长链;
存在的问题:4014的结果大部分都存在于1~10^6内,那么它们的结果也基本上都在这4014个结果内,第2步时就失败。

想法2:
  1、将1~10^6的阶乘结果存入字典,只有4014个结果;
  2、由4014个结果再得到阶乘结果,并记录这4014个结果分别是由几个数生成的;
  3、出现重复,并且循环次数不足60次的,排除;
  4、循环2~3共60次;每次把前次的累计结果加到本次的结果内作记录;
  5、最后看循环结束时,幸存的数字和对应的记录次数,这些记录次数就是所需的结果。
存在的问题:同上、外加第3步的判断不好实现。
回复

使用道具 举报

发表于 2018-1-4 14:00 | 显示全部楼层
继续改进,把ReDim crr&(1 To 60)放到循环外,因为有k在,没必要每次清空数组,现在0.6秒左右就跑完了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-3-29 17:17 , Processed in 0.458390 second(s), 5 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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