Problem 58 - spiral primes

 - memoize the count of prime diagonals for length n
 - count for length n + 2 = count for length n + num primes on outer diagonals
 - both this memoized recusive version and iterative version take ~20 seconds.
Problem 59 - XOR decryption

 - slice the ciphertext by keysize
 - histogram the slice and find most common code
 - XOR most common with ord(' ') to recover key
 - once key for each slice found, plain text recovered with XOR