def smallest_factor(n): """prec: n is an integer, n >= 1. if n == 1, return 1 return the smallest factor of n that is >=2. """ if n%2 == 0: return 2 i = 3 while i *i <= n: if n%i == 0: return i i += 2 return n def prime_factorization(n): """ prec: n >= 1. If n == 1, return [] otherwise, return a list containing the prime factors of n""" if n == 1: return [] d = smallest_factor(n) return [d] + prime_factorization(n//d) x = 111 print(f"smallest_factor({x}) = {smallest_factor(x)}") x = 1 print(f"smallest_factor({x}) = {smallest_factor(x)}") x = 8 print(f"smallest_factor({x}) = {smallest_factor(x)}") x = 215 print(f"smallest_factor({x}) = {smallest_factor(x)}") x = 997 print(f"smallest_factor({x}) = {smallest_factor(x)}") x = 1000000007 print(f"smallest_factor({x}) = {smallest_factor(x)}") x = 111 print(f"prime_factorization({x}) = {prime_factorization(x)}") x = 1 print(f"prime_factorization({x}) = {prime_factorization(x)}") x = 8 print(f"prime_factorization({x}) = {prime_factorization(x)}") x = 215 print(f"prime_factorization({x}) = {prime_factorization(x)}") x = 997 print(f"prime_factorization({x}) = {prime_factorization(x)}") x = 1000000007 print(f"prime_factorization({x}) = {prime_factorization(x)}")