完成了哪些优化以使此代码快速完成?

2024-10-01 22:25:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我在解决一个我遇到的问题,从0到8的3的幂和是多少。你知道吗

我用纸和笔得到了答案,并试图用一些简单的python来验证它

print(sum(3**k for k in range(2010)) % 8)

我很惊讶它这么快就给出了答案。我的问题是,口译员使用了哪些优化或技巧来快速得到答案?你知道吗


Tags: 答案infor技巧rangesumprint口译员
3条回答

没有,只是电脑的运算量不大。你知道吗

您的代码相当于:

>>> a = sum(3**k for k in range(2010))
>>> a % 8
4

a是一个959位的数字——对计算机来说这不是一个大任务。你知道吗

试着在2010的末尾加上两个0,你会发现这需要相当长的时间。你知道吗

没有什么花哨的优化会导致您观察到的快速响应。计算机的绝对速度比你想象的要快得多。你知道吗

工作中唯一的优化是使用与k中的位数成比例的乘法数来计算3**k的每个实例(它不会将3自身乘以k-1次)。你知道吗

如前所述,如果你将2010年提升到20100年或201000年或……,这将需要更长的时间,因为3**k变得非常大。然而,在这些情况下,你可以通过重写它来极大地提高它的速度,例如

print(sum(pow(3, k, 8) for k in range(201000)) % 8)

在内部,pow(3, k, 8)仍然执行与k中的位数成比例的乘法,但不需要在内部保留任何大于8**2(模的平方)的整数。你知道吗

相关问题 更多 >

    热门问题