import time
import math
from scipy.special import factorial
def factorial2(n):
result = 1
for i in range(1, n + 1):
result *= i
return result
n = 5
start_time = time.time()
fact_builtin = factorial(n, exact=True)
builtin_time = time.time() - start_time
start_time = time.time()
fact_custom = factorial2(n)
custom_time = time.time() - start_time
print(f"Built-in SciPy factorial({n}): {fact_builtin}, Time: {builtin_time:.5f} sec")
print(f"Custom factorial({n}): {fact_custom}, Time: {custom_time:.5f} sec")
aW1wb3J0IHRpbWUKaW1wb3J0IG1hdGgKZnJvbSBzY2lweS5zcGVjaWFsIGltcG9ydCBmYWN0b3JpYWwKCmRlZiBmYWN0b3JpYWwyKG4pOgogICAgcmVzdWx0ID0gMQogICAgZm9yIGkgaW4gcmFuZ2UoMSwgbiArIDEpOgogICAgICAgIHJlc3VsdCAqPSBpCiAgICByZXR1cm4gcmVzdWx0CgpuID0gNSAKCnN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQpmYWN0X2J1aWx0aW4gPSBmYWN0b3JpYWwobiwgZXhhY3Q9VHJ1ZSkgIApidWlsdGluX3RpbWUgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUKCnN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQpmYWN0X2N1c3RvbSA9IGZhY3RvcmlhbDIobikgCmN1c3RvbV90aW1lID0gdGltZS50aW1lKCkgLSBzdGFydF90aW1lCgpwcmludChmIkJ1aWx0LWluIFNjaVB5IGZhY3RvcmlhbCh7bn0pOiB7ZmFjdF9idWlsdGlufSwgVGltZToge2J1aWx0aW5fdGltZTouNWZ9IHNlYyIpCnByaW50KGYiQ3VzdG9tIGZhY3RvcmlhbCh7bn0pOiB7ZmFjdF9jdXN0b219LCBUaW1lOiB7Y3VzdG9tX3RpbWU6LjVmfSBzZWMiKQ==