【问题标题】:How long would it take to calculate a `n ** n`(n times n) with an `n` of 64165 digit in decimal? [closed]用十进制的 64165 位的 `n` 计算 `n ** n`(n 乘以 n) 需要多长时间? [关闭]
【发布时间】:2015-01-01 11:14:08
【问题描述】:

假设这个计算在正常的I7cpu 上保持。

这个 n 的一部分看起来像: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,百万年就可以计算出来。

这是真的吗?

【问题讨论】:

  • 如果您的问题是计算 64165**64165 需要多长时间,使用 python 2.7 的 PC 只需不到一秒。
  • 您对c 的值是log(3)/log(2),顺便说一句。但我也不明白你的确切问题是什么。
  • 你问的是n**n(求幂)还是n*n(n乘以n)?如果是求幂,那么地球上所有的计算机放在一起就没有足够的内存来存储结果。
  • @BHATIRSHAD 更像n ** n,其中n 有64165 位小数,因此您的结果是结果中的小数位数。将其与 99 公斤有机硅或宇宙中的电子数量进行比较。

标签: python c algorithm


【解决方案1】:

问题是结果将是一个非常大的整数,不仅是 long pow 操作,而且结果的分配也是如此,都是耗时和消耗 CPU 的操作。

【讨论】:

  • 如何大概算出耗时?
  • 您必须知道您使用的 Python 版本是如何进行此计算的,并添加您对处理器架构、RAM 与处理器和操作系统的连接方式的了解。祝你好运。
【解决方案2】:

我想知道是否存在一个常数值 c 使得 2**x == 3**(x/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...

【讨论】:

  • FWIW,这个常数的有理近似出现在对等律音阶的研究中,例如53 equal temperament。当然,找到这种近似值的常用方法是使用continued fractions 算法......但我认为我们都变得相当偏离主题。 :)
猜你喜欢
  • 2023-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2020-07-30
  • 2015-01-29
  • 2014-03-30
相关资源
最近更新 更多