def lznd_trailing_zeros (n):
"Return the number of trailing zeros of N!"
r = 0
for i in range(5, n+1, 5):
while i%5 == 0:
r += 1
i = i / 5
return r
def lznd_fact (n):
"Return the last non-zero digit of N!"
f2 = f5 = lznd_trailing_zeros(n)
r = 1
for i in range(1,n+1):
while f2 > 0 and i%2 == 0:
f2 -= 1
i /= 2
while f5 > 0 and i%5 == 0:
f5 -= 1
i /= 5
r = (i*r) % 10
return r