# pow(x, y, z) more efficient than x**y % z and other options

See 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)
for i in range(0, len(results_list)):
print(results_list[i], ':', results_list[i])``````

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``````