1.6 卡普雷卡數
相傳在我國近鄰印度,某鐵路線上的一塊寫著3025(km)的里程碑被雷擊而一分為二:30,25。某天,數學家卡普雷卡(Kaprekar)路過那里,他發現3025這個數因雷擊而突顯“個性”,即有3025=(30+25)2。
此后,卡普雷卡專門收集這種神奇的“怪數”。現稱這樣具有“分2段和的平方”特性的整數為卡普雷卡數。
【問題】 在4位整數中尋求與(30+25)2=3025類似的卡普雷卡數。
【探求】 保留低2位為25,探求4位數。
設x是2位整數,則
(x+25)2=x100+25
整理并分解,有
(x-30)(x-20)=0
因而得x=30,x=20,即在4位整數中除了3025之外,卡普雷卡數還有2025,即(20+25)2=2025。
【拓展】 從4位拓展到偶數位。
探索偶數n位卡普雷卡數:偶數n位整數分為前后兩個n/2位整數,該數等于所分兩個數和的平方。
輸入偶數n(4≤n≤14),輸出所有n位卡普雷卡數。
1. 設計要點
注意到位數n可能超過10位,相關變量設置為雙精度實型。
(1)設置枚舉循環。
設n位平方數a=b?b,求出b的最小值c與最大值d。
為縮減循環次數,設置b(c~d)循環,循環中a=b?b即為n位平方數。
(2)實施分段。
設置分段特征量w=10n/2,對平方數a應用取整x=floor(a/w)與求余y=fmod(a,w),計算a分段的前后兩個n/2位整數x,y。
(3)分段和判別。
如果后一段首位為零,則導致整數y不足n/2位,為此需加上條件y>=w/10。
若滿足條件b=x+y且y>=w/10,即找到n位卡普雷卡數a,進行打印輸出。
2. 程序設計

3. 程序運行示例與說明

以上所得4個14位卡普雷卡數所分的前后兩段都是7位整數。
如果分段和條件檢測中省略y>=w/10,則出現87841600588225=(8784160+588225)^2,顯然這一增解所分第2段的首位是0,造成兩段位數之和不等于n位。
當n=6時,只有唯一一個6位卡普雷卡數:494209=(494+209)^2。
當n=8時,有60481729=(6048+1729)^2等4個8位卡普雷卡數。
對于位數n為奇數,或分解為多段,或冪指數為大于2的整數,是否存在類似卡普雷卡數,將在第3章中探討。