第二种搜寻水仙花数的Mathematica算法

2024-10-24 22:20:50

1、前文的代码,来寻找七位数的水仙花数:Table[If[({a, b, c, d, e, f, g}^7 // Total) == FromDigits[{a, b, c, d, e, f, g}], FromDigits[{a, b, c, d, e, f, g}], 0], {a, 1, 9}, {b, 0, 9}, {c, 0, 9}, {d, 0, 9}, {e, 0, 9}, {f, 0, 9}, {g, 0, 9}] // Flatten // Union // AbsoluteTiming耗时超过20秒。

第二种搜寻水仙花数的Mathematica算法

3、IntegerDigits[n]把整数n拆分成单个数字,此时的n必须是整数;如果是负数,负号会被忽略。

第二种搜寻水仙花数的Mathematica算法

5、如果先针对个位数进行判断,或许会容易不少;注意到n^8的个位数只能是0,1,5,6:Table[IntegerDigits[n^8][[-1]], {n, 1, 10}]

第二种搜寻水仙花数的Mathematica算法

7、于是,把算法进一步修改为:AbsoluteTiming[Table[If[u[Total[xx[IntegerDigits[n]]]] == u[n], If[(IntegerDigits[n]^8 // Total) == n, n, 0], 0], {n, 10^7, 10^8 - 1}] // Union]也还是很慢,半天没出结果。

猜你喜欢