3x + 1 步数分类记录搜索


 •  我需要什么特殊的软件才能加入这个项目?
 •  这对我的系统有什么影响?
 •  我在哪里下载这个软件?
 •  我怎么获得计算单元?
 •  怎么样才能停止计算?
 •  怎么样才能重新开始计算?
 •  怎么样报告结果?
 •  怎么样退出这个项目?
 •  3x+1 问题到底是什么?
 •  如果我没有脚本宿主怎么办?
 •  这个软件是怎么工作的?
 •  常见问题.
 •  现在进展如何?

63,728,127 的路径


我需要什么特殊的软件才能加入这个项目?

您不需要什么很特别的软件就能加入这个项目. 这个项目的主程序是一个可以在任何 Windows 平台下运行的小程序, 所以您需要的仅仅是一台 PC. 不过对于 MacIntosh 和 Unix 用户来说, 很对不起, 没有适合您们计算机的相应的程序.

为了使程序的运行更加方便, 我还用 VBScript 写了一个脚本, 您需要 Windows 脚本宿主 (WSH) 来运行它. Windows 2000 and Windows XP 自带WSH, 而 IE 5.0 中也有WSH. 很容易知道您的系统是否有 WSH: 如果一个后缀名为 .vbs 的文件, 图标是一个展开的浅蓝色卷轴的话, 那您的系统中已经有 WSH 了.


这对我的系统有什么影响?

程序对系统的影响部分取决于您的操作系统:

在 Windows NT, Windows 2000 或者 Windows XP 上这个程序对系统几乎没有什么影响. 这个程序在一个 DOS 窗口里边运行, 通常只占 500kb 的内存. 它的优先级很低, 基本上只是使用您的计算机的空闲时间. 它只在每完成一个循环 (在 866MHz 的机器上大约需要 20 分钟) 之后才往硬盘写那么一行. 除此以外, 它并不会使用系统的其它资源, 也不会进行任何网络操作.

但是在 Windows9x/ME 上, 没有特别的指令可以使程序启动在低优先级下, 所以这个程序就会在正常优先级下面运行. 所以这是您可能会不时觉察到程序对速度的影响. 尽管这样, 因为 Windows9x/ME 对于前台程序会赋予最高优先级, 程序对速度的影响会被大大减弱到近乎没有.

建议检查一下屏幕保护程序的设置, 因为有些屏幕保护程序包括很多图形, 这就会用掉很多 CPU 时间并且减慢计算的速度.

现在, 这个项目的每个计算单元都是一个大小为 20,000,000,000,000 (20*1012) 的区间. 要完成这样一个计算单元需要在一台 1000 MHz 的机器上运行大约 19 天 (指空闲时间).


我在哪里下载这个软件?

您可以在这里下载到这个软件 (只有 15kb).
然后您可以把它解压缩到某个目录, 然后再来问我要一个工作单元来计算 (具体见下文).


我怎么获得计算单元?

这个分布式搜索是将要搜索的区间分为一个个大小为 20*1012 个数字的区间 (也就是工作单元) 来进行的. 只需要发邮件到 然后我就会尽快在回复中给您一个工作单元. 很快您就会看到您的名字出现在搜索进展页中了.
然后您将那个后缀名为 .vbs 的文件用记事本打开, 在第三行将原来的数字改为我发给您的代表工作单元的那个数就可以了. 以后您只需要双击该文件, 程序就会自动运行了.

如果您的系统是 Windows9x 的话程序在第一次运行的时候将会给出一个小小的警告. 不用担心, 这只是提醒一下您在 Windows9x 下这个程序可能会对其他程序的性能造成一些影响而已.

如果您机器的 CPU 是 Pentium-4 而又使用 Windows XP 的话, 可能就会有超线程功能: 系统会以为您有两个 CPU, 每个分别使用 50% 的真实 CPU 时间. 那么, 通过将工作单元一分为二, 您可以得到双倍的速度. 详见下文.


怎么样才能停止计算?

程序不会自动按照您的要求 "干干净净" 地停止, 因为我发现如果把程序编成那样子的话性能会大大下降. 如果您需要停止计算, 强行关掉这个程序就可以了. 这不会对以前的运算造成什么影响, 因为运算的结果已经被记录在了记录文件中了.


怎么样才能重新开始计算?

当您运行程序的 .vbs 脚本以后, 程序会自动从上次停下来的地方重新开始计算, 所以在重启机器后只需要运行一下脚本文件就可以了.

最好将脚本文件放到启动项里边, 这样的话它就会在系统启动的时候自己启动, 不需要您的干预. 您也可以在任务计划当中设置脚本在系统启动时启动.


怎么样报告结果?

程序每计算过 18,000,000,000 (其实就是 234) 个数字以后会自动在记录文件当中写入一行, 在启动和停止时也会写入一行. 程序也会记录在搜索过程中找到的有趣的数. 其实这些有趣的数并不多, 大概在每 5 * 1012 个数中有一个, 但有时却会成群结队地来, 所以通常搜索一个星期都没有发现什么是很正常的事情. 每行最后的数是用来验证正确性的.

每当一个工作单元计算完成, 请将记录文件发到 eric@ericr.nl. 记录文件不大 (大约 50kb), 当然您也可以把它压缩成 zip 格式再发过来.


怎么样退出这个项目?

显然, 您想什么时候退出就可以在什么时候退出. 退出的时候请跟我说一声并把当前的记录文件发给我, 这样的话我就可以让别人把这个工作单元算完.
有时候有人会问我要一个工作单元但是从来没有算完. 如果一个工作单元在 5 个月里边没有完成的话, 我会发三次邮件来联系您. 如果在六个月后我没有收到回复的话, 我会认为是您不想在参加这个项目了, 这样的话您的工作单元就会让另外的人来计算.


3x+1 问题到底是什么?

3x+1 问题是那些看起来最简单然而仍未被解决的数学问题之一. 您可以在 3x+1 主页面看到有关它的信息. 您也可以在 MathWorld 网站找到一个关于这个问题的一个简短的解释. 如果您对这个问题真的很感兴趣的话可以看看 Lagarias 的关于 3x+1 问题的综述.


如果我没有脚本宿主怎么办?

最简单的方法就是在 微软 网站上面下载一个. 那是免费的, 文件也不大, 大约 700kb.

如果您不想在您的系统中运行脚本的话, 您也可以自己运行程序, 就是在每次重新启动程序的时候都要自己根据记录文件的最后一个数字写命令行代码. 下文将会有介绍.


这个软件是怎么工作的?

关键是它能够通过命令行运行, 如:

start /low w422b /o /c233 /fw2840.log 2844,456,000,000,000

以下是每个参数的解释:

/low : 在低优先级下启动. 这就保证了这个程序不会拖慢您的系统.
注意, 这个选项对 Windows 9x 无效.

/o : 优化运行. 这就保证了程序不是偶然被打开的.

/c<number> : (可选) 运行轮数. 每一轮就是 232 个数字, 大约就是 4,300,000,000. 233 轮相当于大约 1012, 而完成整个工作单元需要 4657 轮.

/f<filename> : (可选) 记录文件的文件名. 计算结果被记录在这个文件中, 如果不指定的话程序默认为 'wondrous.log'.

<number> : 开始计算的数字. 这个数字在程序中会自动舍入成 232的倍数, 所以其实后面的 9 位数字不是太重要. 这些逗号是可有可无的, 这里只是为了阅读方便.


常见问题

Q:我能不能将一个工作单元分到几台计算机上面去计算?
A: 当然可以. 在 .vbs 脚本文件的开头您会发现类似这样的文字:
  Const blockstart = 25920
  Const blockinterval = 20
第一行可能有所不同, 反正就是您要计算的工作单元.
如果您将它改成
  Const blockstart = 25920
  Const blockinterval = 10
您的计算机就会计算这个工作单元的前半部分.
然后在另一台计算机上面您可以在同样地方把脚本文件修改成:
  Const blockstart = 25930
  Const blockinterval = 10
这样的话这台计算机就会计算这个工作单元的后半部分.
Q:我没有 Windows 脚本宿主. 在哪里才能获得这个?
A: 最简单的方法就是到微软下载一个.
那是免费的, 文件也不大, 大约 700kb.
Q:如果我关掉程序或者重启会不会有什么问题? 程序记得在哪里重新开始计算吗? 是不是我必须正确地关掉程序?
A: 程序不会自动按照您的要求 "干干净净" 地停止, 因为我发现如果把程序编成那样子的话性能会大大下降. 但是通过脚本文件可以在记录文件中提取上次停止的位置, 在该位置自动重新开始计算.
Q:我打开了记录文件, 发现有很多 "溢出" (overflow) 字样, 那是不是意味着有问题呢?
A: 一点都没有问题. 程序在通常情况下用 64 位来计算, 而有的数字在计算过程中需要超过 64 位来储存中间过程. 对于这些数字, 程序会在 128 位下重新对其进行计算. 这种情况每一次发生都被计作一次溢出 (overflow). 作为程序正确运行的标志, 每 4 轮这个数字就会被记下来一次.


回到 3x+1 主页面.