用十进制的64165位数'n`来计算一个'n ** n`(n次n)需要多长时间?

时间:2014-11-05 09:59:53

标签: python c algorithm

假设此计算保持在正常的I7 cpu。

这部分内容如下:062818261573550755996975051396213990265395588957460690342970606032106870077208096704804861337086094604502447252509279335757453605836337900088980571550652843637152844978598425585659705979638641046274358312112553872770884438397651131234023085240167008580828612926148647820470126736393237752952205498922435592164336944705

事情就这样发生了。

今天下午我突然想到了一个猜测。我想知道是否存在c

的常数值2**x == 3**(x/c)

我想出了一个近似值:c = 1.5849116411760045

我试图检查这个x = 213145值的准确性c

我做了n = 3 ** (int(n/x)) - 2 ** n,并且感到震惊,n是一个64165位的十进制数字!

之后,我做了一个随意的动作:n ** n

我等了这么久,答案没有出来。

经过一番思考后,我感到很惊讶。我将这个数字乘以大约10**64165次!

然后我想知道在宇宙消失之前它是否会失效!

但是我的同事告诉我,CPU不会愚蠢地试图将它增加那么多时间。它将使用一些算法来缩短时间。

经过神奇的计算后,他告诉我,如果我的计算机可以进行简单的计算10**8一秒钟,那么百万年就可以解决它。

这是真的吗?

2 个答案:

答案 0 :(得分:2)

问题是结果将是一个非常大的整数,因此不仅是长动作操作,而且结果的分配,都是繁重的时间和CPU消耗操作。

答案 1 :(得分:2)

  

我想知道是否存在使2**x == 3**(x/c)

的常数值c

如果是x,则

2**x == 3**(x/c)

然后

log(2**x) == log(3**(x/c))

x * log(2) = (x/c) * log(3)

所以

c = log(3)/log(2) ~ 1.5849625...