我正在尝试计算pow函数计算指数模数所用的时间。使用g,x,p的值进行硬编码时,代码会产生错误,并且使用pow函数中的值,代码会挂起。当我使用time()和clock()来计算这段代码所花费的时间时,同一条代码正在有效地工作。 我想要准确性,现在我已经在使用clock()和time()函数测试后转移到timeit模块。
代码适用于较小的值,如pow(2,3,5),这是有道理的。如何使用timeit模块提高计算时间的效率。
我也是python的初学者,如果代码中有任何愚蠢的错误,请原谅我。
import math
import random
import hashlib
import time
from timeit import Timer
g = 141802876407053547664378835005750805370737584038368838959151050908654130616798415530564917923311706921535439557793280725844349256960807398107370211978304
x = 1207729835787890214
p = 4870352607375058055471602136317178172283784073796673298937466544646468718314482464390112574915498953621226853454222898392076852427324057496200810018794472
t = Timer('pow(g,x,p)', 'import math')
z = t.timeit()
print ('the value of z is: '), z
由于
答案 0 :(得分:4)
这里有两个问题:
您无法直接从timeit
访问全局变量:请参阅this question。您可以使用它来修复错误:
t = Timer('pow(g,x,p)', 'from __main__ import g,x,p')
或者只是将数值直接放在字符串中。
默认情况下,timeit模块运行1000000次迭代,这将花费太长时间。您可以更改迭代次数,例如:
z = t.timeit(1000)
这可以防止看似挂起的事情(但实际上只是一个很长的计算)。