http://projecteuler.net/ solutions