% TODO use MK85 \myheading{Solving Problem Euler 31: ``Coin sums''} \begin{framed} \begin{quotation} In the United Kingdom the currency is made up of pound (£) and pence (p). There are eight coins in general circulation: 1p, 2p, 5p, 10p, 20p, 50p, £1 (100p), and £2 (200p). It is possible to make £2 in the following way: 1×£1 + 1×50p + 2×20p + 1×5p + 1×2p + 3×1p How many different ways can £2 be made using any number of coins? \end{quotation} \end{framed} ( \href{http://projecteuler.net/problem=31}{Problem Euler 31 --- Coin sums} ) \label{SMTEnumerate} Using Z3 for solving this is overkill, and also slow, but nevertheless, it works, showing all possible solutions as well. The piece of code for blocking already found solution and search for next, and thus, counting all solutions, was taken from Stack Overflow answer \footnote{\url{http://stackoverflow.com/questions/11867611/z3py-checking-all-solutions-for-equation}, another question: \url{http://stackoverflow.com/questions/13395391/z3-finding-all-satisfying-models}}. This is also called ``model counting''. Constraints like ``a>=0'' must be present, because Z3 solver will find solutions with negative numbers. \lstinputlisting[style=custompy]{equations/pe31/pe31.py} Works very slow, and this is what it produces: \begin{lstlisting} [h = 0, g = 0, f = 0, e = 0, d = 0, c = 0, b = 0, a = 200] [f = 1, b = 5, a = 0, d = 1, g = 1, h = 0, c = 2, e = 1] [f = 0, b = 1, a = 153, d = 0, g = 0, h = 0, c = 1, e = 2] ... [f = 0, b = 31, a = 33, d = 2, g = 0, h = 0, c = 17, e = 0] [f = 0, b = 30, a = 35, d = 2, g = 0, h = 0, c = 17, e = 0] [f = 0, b = 5, a = 50, d = 2, g = 0, h = 0, c = 24, e = 0] \end{lstlisting} 73682 results in total.