【发布时间】:2021-11-06 15:51:07
【问题描述】:
在代码中处理大量数字时,我完全是初学者,我知道这绝对是错误的方法,但这是我开始的。
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 这样的另一种语言会显着提高速度,从而需要数天或数小时而不是数小时吗?我可以使用其他方法/算法吗?
【问题讨论】:
-
为什么要存储小于 2^100 的每个数字?
-
这是一个编程测验问题吗?通常,您不应该实际存储它,而只是计算需要多少。
-
@rv.kvetch - tqdm 是 python 的进度条。而不是
for num in range(..),你通过 tqdm 运行它,你会得到显示进度的 ascii 艺术。 -
从
2**99(包括)到2**100(不包括)的数字都占用100位。显式循环所有这些数字来计算它们的位数简直是荒谬的,只需将 100 乘以范围的大小(对于所有先前的 2 次幂范围也是如此)。 -
@tdelaney 抓紧时间,现在就开始吧
标签: python large-data largenumber