数学黑洞(一)令人拍案叫绝的卡布列克常数

卡布列克是一位数学家,他在研究数字时发现:任意一个不是有完全相同数字的组成的四位数,如果对它们的每位数字重新排序,组成一个最大的数各一个最小的数,然后用最大数减去最小数,差不够四位数时补零,类推下去,最后将变成一个固定的数:6174,这就是卡布列克常数。例如:4321-1234=3087 8730-378=8352 8532-2358=6174 7641-1467=6174。 验证卡布列克运算,任意一个四位数,只要它们各个位上的数字是不全相同的,就有这样的规律:

(1)将组成该四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数; (2)将组成该四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数(如果四个数中含有0,则得到的数不足四位); (3)求两个数的差,得到一个新的四位数(高位零保留)。 重复以上过程(最多7步),最后得到的结果是6174,这个数被称为卡布列克常数。

所以6174也被叫做黑洞数,因为这种现象类似黑洞(进去后就出不来了),也叫“6174问题”,上述变换称为卡普耶卡变换,简称 K 变换。

下面我们用程序来验证这个不可思议的事实:

public class HeiDong6174 {

public static void main(String[] args){

helper(1050,0);

}

private static void helper(int num, int count) {

if(num == 6174){

System.out.println("共执行了" + count + "步");

return;

}

String s = String.valueOf(num);

char[] cs = s.toCharArray();

if(cs.length != 4){

System.out.println("请输入一个三位数或者四位数");

return;

}

for(int i = 0; i < cs.length; i++){

for(int j = i; j < cs.length; j++){

if(cs[i] < cs[j]){

char temp = cs[i];

cs[i] = cs[j];

cs[j] = temp;

}

}

}

char[] cs2 = new char[cs.length];

for(int i = 0; i < cs.length; i++){

cs2[i] = cs[cs.length-1-i];

}

int n1 = Integer.parseInt(new String(cs));

int n2 = Integer.parseInt(new String(cs2));

int new_num = n1 - n2;

System.out.println(n1 + "-" + n2 + "=" + new_num);

if(new_num / 1000 < 1)//如果不足四位数,高位补0,等价于低位补0

new_num *= 10;

helper(new_num,count+1);

}

}

测试结果:

6174是卡布列克常数的代名词,还有其他位数的情况:

三位数也有一数495,任何三位数经过这样的运算都会对应到495。其它位数就没有像三位数及四位数这样单纯的状况,会对应到不只一种结果,或是进入数字循环(即数个数循环对应) 5位数的状况:没有黑洞,有3个循环

71973

83952

74943

62964

71973

82962

75933

63954

61974

82962

53955

59994

53955

6位数的状况:有2个黑洞631764、549945,还有1个7个成员的循环

420876

851742

750843

840852

860832

862632

642654

420876

7位数的状况:没有黑洞,只有1个8成员的循环

7509843

9529641

8719722

8649432

7519743

8429652

7619733

8439522

7509843

8位数的状况:有2个黑洞63317664、97508421

9位数的状况:有2个黑洞554999445、864197532

10位数的状况:有3个黑洞6333176664、9753086421、9975084201

证明如下:转自中国地质大学江城学院邬金华副教授的文章编辑本义项

热门