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的增加變得越來越長。