A few functions that aren’t contained in the math module – I’ll continue to add to these as time permits.
A recursive implementation of Euclid’s algorithm to find the greatest common divisor of two numbers:
def gcd(a,b): """ pre: a, b +ve integers calcalates gcd by Euclid """ c = max(a, b) d = min(a, b) if c%d == 0: return d else: return gcd(d, c%d)
Using the gcd function to return the least common multiple:
def lcm(a, b): """ pre: a, b +ve integers returns least common multiple of a and b """ return a*b/gcd(a, b)
A function to return the product of all numbers in a list:
def product(aList): """ pre: aList a list of integers returns: a product of all terms in the list """ prod = 1 for x in aList: prod *= x return prod
Using the product function to calculate the number of combinations of n items from a set of size m:
def choose(m, n): """ pre: m, n +ve integers pre: m > n returns: m choose n """ return product(range(max(n, m-n) + 1, m + 1))/product(range(1, min(n, m-n) + 1))
A recursive factorial function:
def fact(n): """ pre: n +ve integer returns: n! """ if n > 1: return n * fact(n - 1) else: return 1
A generator for the Fibonacci sequence:
def gen_Fib(): """pre: a, b, below +ve integers returns: generator with an iterator to obtain the Fibonacci sequence """ a = 0 b = 1 while True: yield b a, b = b, a + b
A one-liner to find a digital sum:
def sum_digits(n): """ pre: n +ve integer returns: sum of digits in n """ return sum([int(digit) for digit in str(n)])
A prime test:
def is_prime(n): """ pre: n +ve integer returns: true if n is prime, else false """ import math for i in range(2, int(math.sqrt(n)) + 1): if n % i == 0: return False return True
A function to return the list of all divisors of a number:
def divisors(n): """ pre: n +ve integer returns: a list of all divisors of n """ import math result = [] for i in range(1, int(math.sqrt(n)) + 1): if n % i == 0: result.append(i) if i != n/i: result.append(n/i) return len(result)