趣味数学及编程拓展
上QQ阅读APP看书,第一时间看更新

1.1 水仙花与兰德尔数

兰德尔(Randle)数又称自方幂数,是一类涉及自身数字特点的整数。

本节从探求最简单的3位水仙花数开始,进而编程探索一般n(3~8)位兰德尔数。

1.1.1 水仙花数

一个3位整数如果等于它的3个数字的立方和,那么该3位数称为水仙花数。

【问题】 有多少个水仙花数?试探求水仙花数。

【思考】 从最小数字开始,逐个数字实验探求。

设水仙花数为abc(a为百位数字,b为十位数字,c为个位数字),满足

100a+10b+c=a3+b3+c3 (a,b,c为整数,1≤a≤9,0≤b≤9,0≤c≤9)

这是一个3元3次不定方程,因涉及3个立方项,简单处理并不现实,拟采用逐位实验探求。

由水仙花数的定义可知,它的3个数字中至少有一个数字在5以上,否则其3个数字的立方和不足3位。

先列出一个数字x的立方x3(见表1-1)以备调用。

表1-1 一个数字x的立方

1. 试取最小数字为0

由表1-1可知,第2个数字的立方不含数字0,即第2个数字必须大于0。

(1)第2个数试取1,第3个数字为x,x3+1的结果中须含数字0,1与x,显然x不存在。

(2)第2个数试取2,23=8,第3个数字为x,x3+8的结果中须含数字0,2与x。试取x=8,512+8=620,含数字0,2,但不含数字8,也不符合要求。

(3)第2个数试取3,33=27,第3个数字为x,x3+27的结果中须含数字0,3与x。试取x=7,343+27=370,含有数字0,3与7,因而得到第1个解370。继续第3个数字取x=8,9,不满足要求。

(4)第2个数试取4,43=64,第3个数字为x,x3+64的结果中须含数字0,4与x。试取x=7,343+64=407,含数字0,4与7,因而得到第2个解407。继续第3个数字x=8,9,不满足要求。

(5)第2个数试取5,6,…,无满足要求的3位整数。

2. 试取最小数字为1

由表1-1可知,第2个数字必须大于1。

(1)第2个数试取2,23=8,选第3个数字为x,x3+9的结果中须含数字1,2与x。试取x=8,512+9=521,含数字1,2,但不含数字8,不符合要求。

(2)第2个数试取3,33=27,第3个数字为x,x3+28的结果中须含数字1,3与x。试取x=5,125+28=153,含数字1,3与5,因而得到第3个解153。继续试取x=6,216+28=244,不符合要求。继续试取x=7,343+28=371,含数字1,3与7,因而得到第4个解371。

(3)第2个数试取4,5,6,…,无满足要求的3位整数。

以此类推,试验最小数字为2,3,…,无满足要求的3位数。

综合以上实验探求,得到4个水仙花数:370,407,153,371。

以上探求水仙花数的方法就是数学实验,由小到大选择各数字逐位试验、调整,探求满足不定方程的解。

顺便指出,数学实验是一种非常重要的数学方法,可培养与加强探索能力的提升。

1.1.2 兰德尔数

兰德尔数:一个n(n≥3)位正整数如果等于它的n个数字的n次幂之和,那么该数称为n位兰德尔数,又称自方幂数。

当n=3时称为水仙花数,当n=4时称为四叶玫瑰花数,当n=5时称为五角星数,当n=6时称为六合数,当n=7时称为北斗七星数,当n=8时称为八仙数,等等。

试编程搜索n(3≤n≤8)位兰德尔数。

1. 探求设计要点

为求n次幂方便,相关变量设置为double型。

(1)循环枚举与分离数字。

建立n(3~8)循环枚举位数。

计算最小的n位整数t后,建立y(t+1~10∗t-1)循环枚举n位整数。

应用求余函数fmod(y,10)与取整函数floor(y/10)分离整数y的n个数字k。

(2)求和与检测。

数字k的n次幂即为pow(k,n);通过s+=pow(k,n);求得n个数字的n次幂之和s。

通过y==s即可检测y是否为n位兰德尔数。

通过检测后即可输出n位兰德尔数,并用变量m统计其个数。

2. 兰德尔数程序设计
3. 程序运行示例与变通

前面应用逐位试验的数学实验探求3位水仙花数并不简捷,当n≥4时,因涉及构成数字的n次方,用同样的推理探求n位兰德尔数并不现实。

以上程序快捷地求出了6种兰德尔数,说明了编程探索与拓展的优越性,进一步说明在趣味数学发展与深入的进程中,程序设计手段不可或缺。

变通:可把以上枚举循环语句for(n=3;n<=8,n++)改变为从键盘输入整数n语句,即可探求某一个n(n≥9)位正整数的n位兰德尔数。

当n≥9时,程序搜索n位兰德尔数的时间随n的增加变得越来越长。