词条 | 6174 |
释义 | 6174猜想 ,1955年,卡普耶卡(D.R.Kaprekar)研究了对四位数的一种变换:任给出四位数k0,用它的四个数字由大到小重新排列成一个四位数m,再减去它的反序数rev(m),得出数k1=m-rev(m),然后,继续对k1重复上述变换,得数k2.如此进行下去,卡普耶卡发现,无论k0是多大的四位数, 只要四个数字不全相同,最多进行7次上述变换,就会出现四位数6174. 6174猜想6174 因数分解:2*3^2*7^3,科学家称这个数为“自我拷贝数”。 例如: k0=5298,k1=9852-2589=7263,k2=7632-2367=5265,k3=6552-2556=3996,k4=9963-3699=6264,k5=6642-2466=4176,k6=7641-1467=6174. 后来,这个问题就流传下来,人们称这个问题为"6174问题",上述变换称为卡普耶卡变换,简称 K 变换. 一般地,只要在0,1,2,...,9中任取四个不全相等的数字组成一个整数k0(不一定是四位数),然后从k0开始不断地作K变换,得出数k1,k2,k3,...,则必有某个m(m=<7),使得km=6174. 更一般地,从0,1,2,...,9中任取n个不全相同的数字组成一个十进制数k0(不一定是n位数),然后,从k0开始不断地做K变换,得出k1,k2,...,那么结果会是怎样的呢?现在已经知道的是: n=2,只能形成一个循环:(27,45,09,81,63).例如取两个数字7与3,连续不断地做K变换,得出:36,27,45,09,81,27,...出现循环. n=3,只能形成一个循环:(495). n=4,只能形成一个循环:(6174). n=5,已经发现三个循环:(53955,59994),(62964,71973,83952,74943),(63954,61974,82962,75933). n=6,已经发现三个循环:(642654,...),(631764,...),(549945,...). n=7,已经发现一个循环:(8719722,8649432,7519743,8429652,7619733,8439552,7509843,9529641...). n=8,已经发现四个循环:(63317664),(97508421),(83208762,86526432,64308654...),(86308632,...) n=9,已经发现三个循环:(864197532),(975296421,...),(965296431,...) 容易证明,对于任何自然数n>=2,连续做K变换必定要形成循环.这是因为由n个数字组成的数只有有限个的缘故.但是对于n>=5,循环的个数以及循环的长度(指每个循环中所包含数的个数)尚不清楚,这也是国内一些数学爱好者热衷于研究的一个课题. 6174是一个非常神奇的数字。乍一看,它可能不这么明显。但是,正如我们即将看到,任何人都可以通过简单的减法去发现6174的特别之处。 C语言程序证明6174猜想6174猜想:一个任意的四位正整数(全相同的除外,如1111)。将数字重新组合成一个最大的数和最小的数相减,重复这个过程,最多七步,必得6174。下面给出c源码证明该猜想(1000-9999除去全相同的):输出量过于庞大故略去了输出。 ----------------------------------c语言实现--------------------------------------- #include<stdio.h> void insertSort(int r[],int len){ int i,k,tmp; for(i=1;i<len;i++){ k=i-1; tmp=r[i]; while(k>=0&&r[k]>tmp){ r[k+1]=r[k]; k--; } r[k+1]=tmp; } } void main(){ int i,count,end; int r[4]; count=0; end=0; for(i=1000;i<9999;i++){ r[0]=i%10; r[1]=i/10%10; r[2]=i/100%10; r[3]=i/1000; if(r[0]==r[1]&&r[1]==r[2]&&r[2]==r[3]) continue; else{ while(end!=6174){ insertSort(r,4); end=1000*r[3]+100*r[2]+10*r[1]+r[0]-(1000*r[0]+100*r[1]+10*r[2]+r[3]); r[0]=end%10; r[1]=end/10%10; r[2]=end/100%10; r[3]=end/1000; count++; } printf("%d一共经过了%d步得到了6174\",i,count); } } printf("\"); } ----------------------------------c语言实现--------------------------------------- C演示任一猜想中的四位数计算过程以上给出了6174猜想的c证明。下面用c演示了对任一猜想中的四位数计算过程,并总计了一共操作的步骤。编译连接后,输入输出结果见下图所示: 输入:2000 输出: 第1步:2000-0002=1998 第2步:9981-1899=8082 第3步:8820-0288=8532 第4步:8532-2358=6174 2000一共经过了4步得到了6174 ----------------------------------c语言实现--------------------------------------- #include<stdio.h> void insertSort(int r[],int len){ int i,k,tmp; for(i=1;i<len;i++){ k=i-1; tmp=r[i]; while(k>=0&&r[k]>tmp){ r[k+1]=r[k]; k--; } r[k+1]=tmp; } } void main(){ int N,count,end,s; int r[4]; int max,min; printf("请输入一个任意的四位正整数(全相同的除外,如1111):"); scanf("%d",&N); count=0; end=0; s=N; while(end!=6174){ r[0]=s%10; r[1]=s/10%10; r[2]=s/100%10; r[3]=s/1000; insertSort(r,4); max=1000*r[3]+100*r[2]+10*r[1]+r[0]; min=1000*r[0]+100*r[1]+10*r[2]+r[3]; end=max-min; count++; printf("第%d步:%d%d%d%d-%d%d%d%d=%d%d%d%d\",count,r[3],r[2],r[1],r[0],r[0],r[1],r[2],r[3],end/1000,end/100%10,end/10%10,end%10); s=end; } printf("%d一共经过了%d步得到了6174\",N,count); } ----------------------------------c语言实现--------------------------------------- Kaprekar变换1949年,来自印度德伏拉利(Devlali)数学家D.R.Kaprekar设计了一个现在被称为Kaprekar变换的操作。首先选择一个四位不全相同的整数(即不是1111,2222,...),然后重新安排每一位上的数字得到一个最大数和最小数。接着,用最大的数减去最小的数从而获得一个新的数。重复以上操作以不断得到新的数。 这是一个简单的变换,但Kaprekar却发现它导致了一个令人吃惊的结果。让我们试试吧,去年是2005年,那就从2005开始。重排这个数的四个位数得到最大数是5200,最小数是0025,即25(如果有一个以上的0,那就把0放左边)。接下来的过程如下: 5200 - 0025 = 5175 7551 - 1557 = 5994 9954 - 4599 = 5355 5553 - 3555 = 1998 9981 - 1899 = 8082 8820 - 0288 = 8532 8532 - 2358 = 6174 7641 - 1467 = 6174 当我们得到6174这个数后,下一步都会得到6174这个数,以后每一步都不断重复。我们把6174这个数称为这个变换的核。所以6174是一个Kaprekar变换的核,但这是不是仅仅由一个数出发而得到6174的特殊例子?接下来我们可以看到6174不仅仅是Kaprekar变换的特例,有更多的惊喜等待着我们。让我们用不同地点整数再试一次,比如1789。 9871 - 1789 = 8082 8820 - 0288 = 8532 8532 - 2358 = 6174 我们又得到了6174! 当我们从2005开始到6174需要7步操作,而1789需要3步。事实上,对于所有四位不全相同的数字通过以上操作都能达到6174这个唯一的数。很神奇,不是吗?Kaprekar变换是如此的简单却从中发现了这个有趣的结果。当我们去思考为什么会是这个神秘的数字6174时,这个过程会更加有趣。 只有6174? 任何四位整数的四个位数都可以通过降序排列得到一个最大的数,而通过升序排列得到一个最小的数。比如有四个整数a,b,c,d他们之间的关系如下: 9 ≥ a ≥ b ≥ c ≥ d ≥ 0 且a,b,c,d不全相同,则最大的数是abcd而最小的数是dcba 我们可以通过标准的竖式减法来得到Kaprekar变换的结果: <th></th>
- d c b a
D = 10 + d - a (因为 a > d) C = 10 + c - 1 - b = 9 + c - b (因为 b > c - 1) B = b - 1 - c (因为 b > c) A = a - d因为a>b>c>d。 如果得出的ABCD可以通过4个最初给出的数a,b,c,d表示的话,那么一个数便会通过Kaprekar变换重复出现。所以我们可以通过考虑{a, b, c, d}的所有可能的组合来判断是否满足以上条件,若符合的话便找到了Kaprekar变换的核。 每个组合(一共有4!=24种组合)给出一个含有四个未知数的联立方程组,所以我们能够解出a,b,c,d。 容易得出只有一种组合得到整数解且满足9 ≥ a ≥ b ≥ c ≥ d ≥ 0的条件。这个组合便是ABCD=bdac,而这种情况下联立方程组的解为a=7, b=6, c=4 和 d=1,即ABCD=6174。 然而如果a=b=c=d,则方程无解。因此6174是Kaprekar变换下唯一不变的数字-我们的神秘数字的确是独特的。 而对于三位数,同样的现象发生了。例如对753进行Kaprekar变换,步骤如下: 753 - 357 = 396 963 - 369 = 594 954 - 459 = 495 954 - 459 = 495 数字495便是三位数在Kaprekar变换下的唯一的核,易验证所有的三位数通过这个变换都会得到495,有兴趣的读者可以自行验证。 达到6174最多需要几步? 我第一次知道6174这个奇特的数是1975年,一个朋友告诉我的,当时给我留下了深刻的印象。我认为弄清楚这个现象为何发生比证明它要难得多。我用计算机去验证是否所有的四位数(四位不全相同)能否通过有限步达到6174这个核。这个程序是大概50行的Visual Basic语言编写,验证了所有8991个符合条件的四位数。 下表显示了运算结果:每个四位不全相同的四位数通过Kaprekar变换达到6174最多仅需7步。如果你用一个四位数通过Kaprekar变换并未在七步之内达到6174那就是你算错了! 迭代次数 数字数 0 1 1 356 2 519 3 2124 4 1124 5 1379 6 1508 7 1980怎样达到6174? 我的计算机程序验证了所有8991个数,不过Malcolm Lines的文章解释说验证Kaprekar变换仅需验证30个数就包含了所有可能的情况。 如前文一样,设一个四位数abcd,满足 9 ≥ a ≥ b ≥ c ≥ d ≥ 0 让我们进行第一次减法。最大的数是1000a+100b+10c+d 而最小的数是1000d+100c+10b+a 。所以这一步减法过程如下: 1000a + 100b + 10c + d - (1000d + 100c + 10b + a) = 1000(a-d) + 100(b-c) + 10(c-b) + (d-a) = 999(a-d) + 90(b-c) 其中1<(a-d)<9,0<(b-c)<9。通过遍历所有的可能情况,我们可以得到经过一次减法后结果的所有可能。如表1所示 表1:执行一次kaprekar变换后的所有可能结果 我们只需对a,b,c,d不全相等且符合条件a ≥ b ≥ c ≥ d的数进行考察,因此我们只需考虑 (a-d) ≥ (b-c)的情况。所以表中灰色部分(a-d) < (b-c)可以略去。 现在我们将表中每个数的四位数降序排列,得到新的最大数准备做第二次减法: 表2:准备做第二次减法的最大数 我们可以忽略掉表2中的重复部分(灰色区域),最后剩下30个数去执行后续的步骤。下图显示了这些数是如何达到6174的。 这30个数达到6174的路径 从这个图可以清楚地看到任何四位数最多仅需7步就可达到6174。即便如此,我仍然认为这是十分神秘的。我猜测这个数的发现者Kaprekar要不绝顶聪明要不就花了很多时间去想这个问题! 两位数,五位数,六位或者更多... 我们已经看到四位数和三位数可以达到唯一的一个核,不过其他数呢?事实证明这样得到的结果与上文相比逊色许多。让我们试一个两位数,比如28: 82 - 28 = 54 54 - 45 = 9 90 - 09 = 81 81 - 18 = 63 63 - 36 = 27 72 - 27 = 45 54 - 45 = 9 不用花太长时间就可发现两位数会得到一个循环9→81→63→27→45→9。不像三位数或四位数那样会得到一个唯一的核。 不过五位数呢?可以找到一个类似6174或495那样的五位数的核吗?要回答这个问题我们可以用和前面类似的方法去分析:验证120种{a,b,c,d,e} 的可能组合符合条件 9 ≥ a ≥ b ≥ c ≥ d ≥ e ≥ 0 且 abcde - edcba = ABCDE 值得庆幸的是这个工作可以由计算机来完成,结果是五位数并不能得到一个唯一的核。不过所有的五位数通过Karprekar变换可以得到以下的三个循环: 71973→83952→74943→62964→71973 75933→63954→61974→82962→75933 59994→53955→59994 就像Malcolm Lines在他的文章中指出的那样,验证六位或更多位数需要耗费大量的时间,这项工作变得极其乏味!为了避免你重走旧路,下表列出了两位数到十位数的验证结果(更多结果可见Mathews Archive of Recreational Mathematics)。从中我们可以看到只有三位数和四位数得到了唯一的核。 优美的结果,但它是特例吗? 我们已经看到通过Kaprekar变换所有的三位数得到495,所有的四位数得到6174。不过我并未解释为何这些数字会得到一个唯一的核。这仅仅是巧合,还是有一些更深层次的数学包含其中?优美而神秘的结果,它可能是偶然的。 让我们暂且打住并考虑日本人Yukio Yamamoto的一个有趣的谜题。 如果将两个五位数相乘将得到123456789,你能否猜出这两个五位数? 这是一个优美的谜题,而且你很可能猜想里面暗含了很深的数学理论。不过事实上它美丽仅仅是由于它是巧合,有许多类似但却没这么优美的例子。比如: (我们可以给你提示以帮助解决这类谜题,这里是答案) 如果我给你Yamamoto的谜题你可能因为题目的优美而抱着极大的兴趣去解决它,不过如果我给你第二个谜题那你可能会对它不屑一顾。我认为Kaprekar的问题和Yamamoto的数字谜题是类似的。我们被它们题目的优美表达所吸引,进而感觉到它们背后隐藏着更深的理论去发掘,然而结果很可能是巧合。类似的误解也曾在过去促进了数学乃至科学的进一步发展。 只知道所有的四位数通过Kaprekar变换可以达到6174而不去理会为什么会有这个结果,这样可以吗?到目前为止,没人能够断定三位数或四位数的Kaprekar变换存在唯一的核仅仅是偶然现象。这一性质如此惊人以致于让我们期待一个数论的伟大理论隐含其中。如果我们回答这个问题的话我们可能发现这只是一个美丽的误解,不过我们不希望是这样。 编辑的话:许多读者发觉所有的karekar变换核位数相加后等于9(译者注:原文有误,应该是被9整除),想知道为什么的话可以看这里。 参考文献Kaprekar, D. R., "Another Solitaire Game", Scripta Mathematica, vol 15, pp 244-245 (1949) Gardner, Martin, "The Magic Numbers of Doctor Matrix", Japanese version, Tokyo: Kinokuniya (1978) Lines, Malcolm E., A number for your thoughts: facts and speculations about numbers..., Bristol: Hilger (1986) Nishiyama, Yutaka, Kurashi no Algorithm, Kyoto: Nakanishiya (1993) |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。