`
txf2004
  • 浏览: 7078824 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

6174猜想

阅读更多
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版、作者信息和本声明。否则将追究法律责任。http://blog.csdn.net/mayongzhan - 马永占,myz,mayongzhan

<!-- 6174猜想
1955年,卡普耶卡(D.R.Kaprekar)研究了对四位数的一种变换:任给出四位数k0,用它的四个数字由大到小重新排列成一个四位数m,再减去它的反序数rev(m),得出数k1=m-rev(m),然后,继续对k1重复上述变换,得数k2.如此进行下去,卡普耶卡发现,无论k0是多大的四位数,
只要四个数字不全相同,最多进行7次上述变换,就会出现四位数6174.例如:
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 变换. -->
<!-- 写了下代码证明这个东西....发现不重复的数永远在7次以内会得6174,重复的数会有时出错,但是如果强制是4位的话,还是6174...哪里出错了.有兴趣的自己看一下吧........顺便可以测测5位的数字6位的数字....三位时是475,其他的好象不太清楚.有兴趣自己研究下 -->
<!-- 代码如下 -->
<?php
/**
* @name test.php
* @date Thu Nov 08 15:00:17 CST 2007
* @copyright 马永占(MyZ)
* @author 马永占(MyZ)
* @link http://blog.csdn.net/mayongzhan/
*/
/**
* 测试6174,需要:测试次数,变换次数,是否可以是重复的数,数的位数
* 不重复的4位需要7次或者更少就可以得到6174
* @param int $count
* @param int $changeCount
* @param boolean $s
* @param int $h
* @return array
*/
header("Content-Type: text/html; charset=utf-8");
function test6174($count, $changeCount, $s, $h)
{
$arrayResult = array();
for ($i = 1; $i <= $count; $i++) { //测试次数
$tempPowH = pow(10,$h); //加工一下变成数,总觉得函数比变量费资源
if ($s) {
$tempNum = rand($tempPowH/10, $tempPowH-1); //根据变量确定随即范围
}
else {
do {
$tempNum = rand($tempPowH/10, $tempPowH-1); //根据变量确定随即范围
}while (diffNum($tempNum,$h)); //当数是重复数的时候判断是否和$s相同,再取一次
}
$arrayResult[$i-1] = array($i,$tempNum);
$tempNumT = $tempNum;
for ($j = 1; $j <=$changeCount; $j++){ //变换次数
$tempNumT = splitNum($tempNumT, $h);
rsort($tempNumT); //从大到小排序
$tempNumA = 0;
foreach ($tempNumT as $value) {
$tempNumA = $tempNumA*10+$value;
}
sort($tempNumT); //从小到大排序
$tempNumB = 0;
foreach ($tempNumT as $value) {
$tempNumB = $tempNumB*10+$value;
}
$tempNumT = $tempNumA-$tempNumB;
array_push($arrayResult[$i-1],$tempNumT);
}
}
return $arrayResult;
}
/**
* 测试是否是某两位相同,相同true,不同false
* @param int $tempNum
* @param int $h
* @return boolean
*/
function diffNum($tempNum, $h) //其实自己判断位数也行.不过上面都判断过了...就没必要了.
{
$tempArray = splitNum($tempNum, $h);
sort($tempArray); //排下序
for ($i = 1; $i < $h; $i++) { //判断...
if ($tempArray[$i-1] == $tempArray[$i]) {
$i = $h; //智慧.的体现.又能结束循环.又能得到标识...
}
}
if ($i == $h+1) { //如果是正常结束那$i就是$h的值,因为$i++
return true; //有相同的
}
else {
return false; //没有相同的
}
}
/**
* 切分数字为数组
* @param int $tempNum
* @param int $h
* @return array
*/
function splitNum($tempNum, $h)
{
$tempArray = array();
for ($i = 1; $i <= $h; $i++) { //利用循环取到每位上的数
$tempPowH = pow(10,$h-$i); //加工一下变成数,还觉得函数比变量费资源
$numA = ($tempNum-$tempNum%$tempPowH)/$tempPowH;
$tempNum = $tempNum-$numA*$tempPowH; //抹掉已经得到的那位
array_push($tempArray, $numA);
}
return $tempArray;
}
$count = 20;
$changeCount =10;
$s = 0;
$h = 4;
$arrayResult = test6174($count, $changeCount, $s, $h); //测试5次,变换10次,不重复的数,4位的数,看是否是6174
echo "共测试<span style='color:red;'>" . $count . "</span>次,";
echo "<span style='color:red;'>" . $h . "</span>位的数,";
echo "变换<span style='color:red;'>" . $changeCount . "</span>,";
echo "该数是否重复:<span style='color:red;'>" . $s . "</span><br />";
echo "测试结果如下:<br />";
echo "&nbsp;[编号]&nbsp;[原数字]&nbsp;[第N次转换的结果]&nbsp;...<br />";
foreach ($arrayResult as $value) {
foreach ($value as $value2) {
if ($value2 == '6174') {
echo "&nbsp;[<span style='color:red;'>" . $value2 . "</span>]&nbsp;";
}
else {
echo "&nbsp;[" . $value2 . "]&nbsp;";
}
}
echo "<br />";
}
?>
<!-- 一般地,只要在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,已经发现三个环:(53855,59994),(62964,71973,83952,74943),(63954,61974,82962,75933).
n=6,已经发现三个循环:(642654,...),(631764,...),(549945,...).
n=7,已经发现一个循环:(8719722,...).
n=8,已经发现四个循环:(63317664),(97508421),(83208762,...),(86308632,...)
n=9,已经发现三个循环:(864197532),(975296421,...),(965296431,...)
容易证明,对于任何自然数n>=2,连续做K变换必定要形成循环.这是因为由n个数字组成的数只有有限个的缘故.但是对于n>=5,循环的个数以及循环的长度(指每个循环中所包含数的个数)尚不清楚,这也是国内一些数学爱好者热衷于研究的一个课题.-->
v
分享到:
评论

相关推荐

    6174猜想_c_

    【6174猜想】是数学领域中一个有趣的数论问题,由印度数学家D.R. 卡普耶卡在1955年提出。这个猜想涉及到四位数的特殊操作,通常被称为“卡普耶卡操作”或“6174现象”。在此,我们将深入探讨这一猜想以及其背后的...

    6174_6174猜想_

    6174猜想,也被称为卡普耶卡(Kaprekar)数,是一个有趣的数学现象,主要在整数操作中出现。这个猜想是关于一个特定的数字游戏,它涉及到将一个四位数重新排列,然后进行加减运算,直至得到一个固定的数6174,或者...

    小程序6174猜想实现

    如此进行下去,卡普耶卡发现,无论k0是多大的四位数, 只要四个数字不全相同,最多进行7次上述变换,就会出现四位数6174.例如: k0=5298,k1=9852-2589=7263,k2=7632-2367=5265,k3=6552-2556=3996,k4=9963-3699=6264,k5=...

    python第二次实验

    6174猜想是指对任意各位数字不相同的四位数,使用各位数字能组成的最大数减去能组成的最小数,对得到的差重复这个操作,最终会得到6174这个数字,并且这个操作最多不会超过7次。 在实验中,我们使用了itertools....

    使用C语言实现黑洞数的方法研究.docx

    黑洞数c语言今儿跟大伙分享一个数字之谜——...这就是数学史上著名的“6174猜想”,也称为6174数字黑洞”,以上计算过程称为卡普雷卡尔运算,这个现象称归敛。当然,这是4个数的情况,当数字个数为3的时候,循环值为495

    使用C语言实现黑洞数的方法.docx

    黑洞数c语言今儿跟大伙分享一个数字之谜...这就是数学史上著名的“6174猜想”,也称为6174数字黑洞”,以上计算过程称为卡普雷卡尔运算,这个现象称归敛。当然,这是4个数的情况,当数字个数为3的时候,循环值为495,也

    Matlab在数论研究中的应用——用Matlab验证哥德巴赫猜想与孪生素数猜想.zip

    本资料包“Matlab在数论研究中的应用——用Matlab验证哥德巴赫猜想与孪生素数猜想”将介绍如何利用Matlab来探讨这两个猜想。 哥德巴赫猜想,由18世纪的普鲁士数学家克里斯蒂安·哥德巴赫提出,被誉为数学界的“皇冠...

    1157 哥德巴赫猜想.cpp

    1157:哥德巴赫猜想 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 14300 通过数: 8298 【题目描述】 哥德巴赫猜想的命题之一是:大于6 的偶数等于两个素数之和。编程将6~100所有偶数表示成两个素数之和。 【输入...

    哥德巴赫猜想论文简化版

    【哥德巴赫猜想】是数学领域中一个著名的未解决问题,它由18世纪的普鲁士数学家克里斯蒂安·哥德巴赫提出。哥德巴赫猜想的基本表述是:每一个大于2的偶数都可以表示为两个质数之和。这个猜想至今未被证明,但已引发...

    c++代码 角谷猜想计算过程.docx

    标题中的"C++代码 角谷猜想计算过程"指的是利用C++编程语言实现角谷猜想的算法。角谷猜想,也称为“冰雹序列”或“3n+1猜想”,是由日本数学家角谷静夫提出的一个未解问题。这个猜想是这样的:对于任意一个正整数n,...

    VB源码-验证哥德巴赫猜想

    从关于偶数的哥德巴赫猜想,可推出:任一大于7的奇数都可写成三个质数之和的猜想。后者称为“弱哥德巴赫猜想”或“关于奇数的哥德巴赫猜想”。若关于偶数的哥德巴赫猜想是对的,则关于奇数的哥德巴赫猜想也会是对的...

    哥德巴赫猜想 Python语言

    ### 哥德巴赫猜想与Python实现 #### 哥德巴赫猜想简介 哥德巴赫猜想是数学中的一个未解决的问题,由克里斯蒂安·哥德巴赫于1742年提出。该猜想可以分为两部分: 1. **弱哥德巴赫猜想**:每个大于5的奇数都可以...

    哥德巴赫猜想_代码实现哥德巴赫猜想_

    哥德巴赫猜想,是数学领域中未解决的难题之一,由18世纪的普鲁士数学家克里斯蒂安·哥德巴赫提出。这个猜想陈述了一个关于偶数的基本假设:**任何大于2的偶数都可以表示为两个素数之和**。至今,尽管经过众多数学家...

    哥德巴赫猜想 验证(用C#来编写的应用程序)

    哥德巴赫猜想是数学界一个经久不衰的谜题,它不仅引起了数学家们经年累月的探索,同时也激发了编程爱好者们利用现代技术进行验证的欲望。由克里斯蒂安·哥德巴赫在1742年提出,这一猜想直截了当却又异常顽固:每一个...

    PTAC语言验证“哥德巴赫猜想”

    PTA【C语言】验证“哥德巴赫猜想”

    哥德巴赫猜想

    **哥德巴赫猜想**是数学领域中的一个著名未解决问题,属于数论的一部分。这个猜想由18世纪的普鲁士数学家克里斯蒂安·哥德巴赫在1742年提出,至今仍未被证明或否定。哥德巴赫猜想的表述非常简单:**任何大于2的偶数...

    C语言源码哥德巴赫猜想

    **哥德巴赫猜想**是数学领域的一个著名未解决问题,由18世纪的普鲁士数学家克里斯蒂安·哥德巴赫提出。这个猜想表明,任何大于2的偶数都可以表示为两个质数之和。至今,尽管经过无数数学家的尝试,但尚未找到一个...

    1086 角谷猜想.cpp

    1086:角谷猜想 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 30792 通过数: 18205 【题目描述】 谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则...

    基于MATLAB的哥德巴赫猜想实验.pdf

    哥德巴赫猜想是数学上一个著名而未解决的猜想,由俄国数学家哥德巴赫于1742年提出,该猜想指出:每一个大于2的偶数都可以表示为两个素数之和。这个问题是数论中的一个经典难题,也是数学上的未解之谜之一。 ...

Global site tag (gtag.js) - Google Analytics