python - 如何找出存储 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 这样的另一种语言会显着提高速度,从而需要数天或数小时而不是数小时吗?我可以使用另一种方法/算法吗?
解决方案
好的,我想通了。我使用了@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/
推荐阅读
- javascript - 反应子组件不会在更新的父状态上重新渲染
- mysql - Docker MySQL 容器 - 基于 IP 的访问被拒绝
- database - 预订应用程序中的客户重复数据删除
- python - 我希望我的机器人能够识别 discord.py 中的不和谐贴纸
- python - Python:用于数据框多值分配的 R 等效代码
- python - Pandas 使用 cumcount 左合并以避免重复行
- python - 如何使用数据透视从组创建的数据框
- css - 如何按比例上下拉伸 CSS 网格项目?
- qt - 有没有办法让光标自动位于 QLineEdit 中而无需先选择它?
- c# - 如何在 decimal.ToString() 中传递两种不同的数字格式