寻找《水仙花数》的Mathematica算法剖析
水仙花数是数论里面的一个有趣现象,其定义在百度百科里面有详细介绍。本文,介绍一下用Mathematica来寻找水仙花数的方法。

2、FromDigits[{a, b, c}]的作用是把三个数字串成一个数。

4、用If语句作出判断:If[({a, b, c}^3 // Total) == FromDigits[{a, b, c}], FromDigits[{a, b, c}], 0]如果a, b, c的立方和等于a, b, c串成的数字,那么这个数字就是三位数的水仙花数,保留下来;否则,用0代替。

6、把结果提取出来:Table[If[({a, b, c}^3 // Total) == FromDigits[{a, b, c}], FromDigits[{a, b, c}], 0], {a, 1, 9}, {b, 0, 9}, {c, 0, 9}] // Flatten // Union

8、用时0.03秒,可以找到全部三个四位数水仙花数:Table[If[({a, b, 罕铞泱殳c, d}^4 // 皈其拄攥Total) == FromDigits[{a, b, c, d}], FromDigits[{a, b, c, d}], 0], {a, 1, 9}, {b, 0, 9}, {c, 0, 9}, {d, 0, 9}] // Flatten // Union // AbsoluteTiming

10、6位数的水仙花墙绅褡孛数只找到一个:Table[If[({a, b, c, d, e, f}^6 // Total) == FromDigits[{a, b, c, d, e, f}], FromDigits[{a, b, c, d, e, f}], 0], {a, 1, 9}, {b, 0, 9}, {c, 0, 9}, {d, 0, 9}, {e, 0, 9}, {f, 0, 9}] // Flatten // Union // AbsoluteTiming耗时将近3秒左右。
