如果我写的博文《数学黑洞(一)令人拍案叫绝的卡布列克常数》惊艳到您了,那西西弗斯黑洞也同样不会让您感到失望。西西弗斯黑洞又叫123黑洞,很明显,这个要出现的不可思议的现象要与再简单不过的数字123扯上了,与6174黑洞还要限制数字位数相比,123黑洞可适用于适合正整数!那么下面我们就看一下关于这个黑洞的描述:
设定一个任意数字串,数出这个数中的偶数个数,奇数个数,及这个数中所包含的所有位数的总数,
例如:1234567890, 偶:数出该数数字中的偶数个数,在本例中为2,4,6,8,0,总共有 5 个。 奇:数出该数数字中的奇数个数,在本例中为1,3,5,7,9,总共有 5 个。 总:数出该数数字的总个数,本例中为 10 个。 新数:将答案按 “偶-奇-总” 的位序,排出得到新数为:5510。 重复:将新数5510按以上算法重复运算,可得到新数:134。 重复:将新数134按以上算法重复运算,可得到新数:123。 结论:对数1234567890,按上述算法,最后必得出123的结果,换言之,任何数的最终结果都无法逃逸123黑洞。
下面我们还是用程序验证这一结论。
代码清单:
import java.util.Random;
public class HeiDong123 {
static final int N = 100;
static int count = 0;
public static void main(String[] args) {
Random r = new Random();
/*随机产生N个随机数进行测试*/
for(int i = 0; i < N; i++)
go(r.nextInt(r.nextInt(1000000)+1));
/*判断N个随机数结果是否产生N个123*/
System.out.println(count == N);
}
private static void go(int a) {
int oushu = 0;
int jishu = 0;
int sum = 0;
while(a > 0){
if((a & 1) == 0)
oushu++;
else
jishu++;
a /= 10;
}
sum = oushu + jishu;
int temp = sum;
int n = 1;
while(temp > 0){
n *= 10;
temp /= 10;
}
int m = n;
temp = jishu;
if(temp == 0)
jishu = 10;
while(temp > 0){
m *= 10;
temp /= 10;
}
sum = oushu * m + jishu * n + sum;
if(sum == 123){
count++;
return;
}
go(sum);
}
}
此问题已在2010年由我国的唯美主义和自然主义男士秋屏证明。
以下内容转载至秋屏的新浪博客上的证明原文:
http://blog.sina.com.cn/s/blog_4d2e0dd80100ih0x.html
“西西弗斯串(数学黑洞)”现象与其证明