打印1后跟googolplex数量为零

时间:2011-01-13 01:44:22

标签: algorithm

假设我们不关心程序的运行时间(对于人类凡人来说实际上是无限的)并且使用有限的内存量(2 ^ 64字节),我们想要在基数10中打印出来,精确值为10 ^(googolplex),屏幕上一次一个数字(大多数为零)。

描述一种算法(可以在当天的计算机上编码),或编写程序来执行此操作。 由于我们实际上无法检查输出,因此我们将依赖集体意见来确定程序的正确性。

注意:我不知道解决方案,或者是否存在解决方案。问题是我自己的发明。那些快速标记这个外在的读者......善意地重新考虑。这很难理论,但肯定是CS。

6 个答案:

答案 0 :(得分:8)

这是不可能的。程序中的状态(10 ^(10 ^ 100))多于宇宙中的电子(~10 ^ 80)。因此,在我们的宇宙中,没有能够执行任务的机器的实现。

答案 1 :(得分:5)

首先,我们注意到10 ^(10 ^ 100)相当于(((((10 ^ 10)^ 10)^ ...)^ 10),100次。

或10↑↑↑↑↑↑↑↑↑↑10。

这产生了以下解决方案:

print 1
for i in A(10, 100)
    print 0

答案 2 :(得分:1)

这是一个解决这个问题的算法:

 print 1
 for 1 to 10^(10^100)
      print 0

使用Hoare logic

可以简单地证明正确性
  1. 没有先决条件
  2. 后置条件是打印一个后跟10 ^(10 ^ 100)个零
  3. 周期的不变量是到目前为止打印的零数等于i
  4. 编辑:解决问题的机器需要能够区分不同状态的一个googolplex:每个状态是打印比前一个更多的结果。执行此操作所需的内存量与存储数字一个googolplex 所需的内存量相同。如果没有那么多可用内存,则无法解决此问题。

    这并不意味着它不是一个可计算的问题:它可以通过图灵机解决,因为图灵机具有无限的内存量。

答案 3 :(得分:1)

bash中的

printf 1
while true; do 
  printf 0
done

......足够接近。

答案 4 :(得分:0)

理论上肯定有这个问题的解决方案,当然假设你有一台能够产生那种输出的机器。我很确定googolplex比宇宙中的原子数大,至少根据物理学家告诉我们的内容,所以我不认为任何可物理实现的计算模型都可以打印出来。但是,从数学上讲,你可以定义一个图灵机,它能够通过给它一个googolplex-ish状态数来打印出这个值,每个状态写一个零,然后移到下一个较低的状态。

答案 5 :(得分:0)

请考虑以下事项:

  • 要打印输出的控制台窗口将具有最大缓冲区大小。
  • 当超出此缓冲区大小时,之前打印的任何内容都将被丢弃,用户将无法向后滚动以查看它。
  • 与googolplex相比,最大缓冲区大小将是微不足道的。

因此,如果您想模仿程序运行完成的用户体验,请找到要打印到的控制台的最大缓冲区大小并打印多个零。

Hurray懒惰!