pow(x, y, z) more efficient than x**y % z and other optionsSee Python: Tips and Tricks for similar articles.
The Python documentation on
pow() states that
pow(x,y,z) is computed more efficiently than
pow(x,y) % z, and our tests show that to be the case.
Note that this is mostly academic as all the methods we tested for raising one number to the power of another and then doing a modulus operation are lightning fast.
You should probably use whichever method suits your coding style the most, but for those who are curious and thrive on speed, here’s how we tested it:
import time import math x = 4 y = 2 z = 3 repeat = 1000000 results = {} # operator start_time = time.time() for i in range(repeat): result = x**y % z i+=1 results["x**y % z"] = time.time()-start_time # pow() Function start_time = time.time() for i in range(repeat): result = pow(x, y, z) i+=1 results["pow(x, y, z)"] = time.time()-start_time # pow() with % operator Function start_time = time.time() for i in range(repeat): result = pow(x, y) % z i+=1 results["pow(x, y) % z"] = time.time()-start_time # math.pow() Function start_time = time.time() for i in range(repeat): result = math.pow(x, y) % z i+=1 results["math.pow(x, y) % z"] = time.time()-start_time # output results results_list = sorted(results.items(), key = lambda t:t[1]) for i in range(0, len(results_list)): print(results_list[i][0], ':', results_list[i][1])
And here are the results:
math.pow(x, y) % z : 0.2949240207672119 x**y % z : 0.41014599800109863 pow(x, y) % z : 0.4418478012084961 pow(x, y, z) : 0.824713945388794
Related Articles
- Fixing WebVTT Times with Python
- Using Python to Convert Images to WEBP
- Scientific Notation in Python
- Understanding Python’s __main__ variable
- Converting Leading Tabs to Spaces with Python
- pow(x, y, z) more efficient than x**y % z and other options (this article)
-