找回密码
 注册
Simdroid-非首页
查看: 133|回复: 7

[欧拉习题] Problem 29: solved

[复制链接]
发表于 2009-3-19 16:00:51 | 显示全部楼层 |阅读模式 来自 江苏无锡
http://projecteuler.net/index.php?section=problems&id=29


  1. f[a_,b_]:=a^b;
  2. Length[DeleteDuplicates[Map[f[#[[1]], #[[2]]] &, Tuples[Range[2, 100], {2}]]]] // AbsoluteTiming

复制代码
{0.1562500, 9183}

评分

1

查看全部评分

发表于 2009-3-20 10:26:52 | 显示全部楼层 来自 北京海淀
Simdroid开发平台
代码不仅效率低,而且似乎有意的很冗长,莫非楼主有好的方法了?不妨贴出来,大家共享嘛
回复 不支持

使用道具 举报

 楼主| 发表于 2009-3-20 17:21:45 | 显示全部楼层 来自 江苏无锡
0.1 秒效率不低了,我就是这代码解题的。

当然我认为还是有优化的潜能的。可是这题 Euler Project 还不是啥经典的算法非要优化到完美为止,

完成项目本身就是时间和精力还有目标的平衡。
回复 不支持

使用道具 举报

发表于 2009-3-21 01:56:13 | 显示全部楼层 来自 美国
本帖最后由 smarten 于 2009-3-20 12:35 编辑

那这样也行了,
  1. Length[Union @@ Table[a^b, {a, 2, 100}, {b, 2, 100}]]
复制代码
或者
  1. Length@Union@Map[Power @@ # &, Tuples[Range[2, 100], 2]]
复制代码
数据不多的,brutal force也还不错。
回复 不支持

使用道具 举报

发表于 2009-3-21 02:14:46 | 显示全部楼层 来自 美国
这个快点,是结构上的提高,不是算法上的提高。
  1. Length[Union[Power @@ Transpose@Tuples[Range[2, 100], 2]]]
复制代码
回复 不支持

使用道具 举报

发表于 2009-3-21 02:24:39 | 显示全部楼层 来自 美国
好像重写了Tuples函数,
  1. Length[DeleteDuplicates[
  2.   Power @@ {k = Flatten[NestList[List, Range[2, 100], 98]], Sort[k]}]]
复制代码
回复 不支持

使用道具 举报

发表于 2009-3-21 02:33:29 | 显示全部楼层 来自 美国
Euler 论坛上的Mathematica代码:
  1. Length[Union @@ Array[Power, {99, 99}, 2]]
复制代码
Array我还真用得不多。
回复 不支持

使用道具 举报

发表于 2009-12-12 21:26:35 | 显示全部楼层 来自 甘肃兰州
  1. Table[a^b, {a, 2, 100}, {b, 2, 100}] // Flatten // Union //
  2.   Length // Timing
复制代码
数据不多的时候怎么算都无所谓
回复 不支持

使用道具 举报

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

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-3-29 05:14 , Processed in 0.040034 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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