在数论中,水仙花数,也称为超完全数字不变数,用来描述一个 n 位非负整数,其各位数字的 n 次方和等于该数本身。若将条件放宽,一个 n 位数,其各个数的 m 次方和等于该数,这样的数称为完全数字不变数

高德纳教授写了一个 CWEB 程序,用来寻找完全数字不变数。使用 cweave 将其转换为 TeX 文件,再使用 xetex 编译成 PDF 文件:

可以点击这里在线阅读完整的 PDF 文件,共 12 页,其中正文 9 页。

使用 ctangle 将这个 CWEB 程序转换为 C 程序,然后使用 clang 编译和运行:

$ clang -O a252648.c && time ./a.out 61
1: 00145594628412421292850519939876219279596702430926364267115105
2: 00129495102611459020639899678988620521527176986805703581773808
3: 00000000000000000000000000000000000000000000000000000000000001
4: 00000000000000000000000000000000000000000000000000000000000000
Altogether 4 solutions for m=61 (29797141 nodes, 3633497248 mems).

real 0m7.505s
user 0m7.453s
sys 0m0.007s

可以点击这里下载 a252648.c。(我做了极小的修改)

参考资料

  1. Wikipedie: Narcissistic number
  2. OEIS: A252648: Irregular table of perfect digital invariants
  3. Don Knuth: CWEB program to generate solutions
  4. The CWEB System of Structured Documentation
  5. 图灵社区:欧拉计划:030. 数字的五次方