http://www.mikeash.com/pyblog/friday-qa-2009-09-25-gcd-practicum.html