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

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章中探讨。