# optimize3.py
def factorial(n):
    result = 1
    while n > 1:
        result *= n
        n -= 1
    return result

def get_first_digit(n):
    while n >= 10:
        n = n // 10
    return n

def main():
    begin = 5000
    fact = factorial(begin - 1)
    for i in range(begin, begin + 100):
        fact = fact * i
        len_fact = len(str(fact))
        first_digit = get_first_digit(fact)
        print(f'factorial({i}) has {len_fact} digits, and the first digit is {first_digit}.')

if __name__ == "__main__":
    main()
