首页 > 解决方案 > 如何找出存储 1 到 2^100 之间的每个数字需要多少存储空间?

问题描述

在处理大量代码时,我完全是初学者,我知道这绝对是错误的方法,但这是我开始的。

import tqdm

try:
    total = 0
    for num in tqdm.tqdm(range(2**100), total=2**100):
        total += len(bin(num)) - 2
finally:
    with open('results.txt', 'w') as file:
        file.write(f'{total=}')

我得到的结果是:

0%|                  | 87580807/1267650600228229401496703205376 [00:39<159887459362604133471:34:24, 2202331.37it/s]

显然,这种方法将花费太长时间。我知道我可以尝试制作这个多核,但我认为这不会对速度产生太大影响。

我在这里有什么选择?

使用像 C 这样的另一种语言会显着提高速度,从而需要数天或数小时而不是数小时吗?我可以使用另一种方法/算法吗?

标签: pythonlarge-datalargenumber

解决方案


好的,我想通了。我使用了@jasonharper 的方法

所以代码如下:

total = 0
for power in range(1, 101):
    total += ((int('1' * power, base=2) - int('1' + '0' * (power - 1), base=2)) + 1) * power

total等于 125497409422594710748173617332225,表示存储 1 到 2^100 之间的每个数字所需的字节数。

在某些情况下,存储 1 到 2^100 之间的所有数字需要 ≈425414947195.2363 倍的地球总存储容量。

参考:https ://www.zdnet.com/article/what-is-the-worlds-data-storage-capacity/


推荐阅读