dairydemon.net/eulerbooks/eulerbooks.html

689 lines
23 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<link rel="stylesheet" href="/styles/default.css" />
<link rel="stylesheet" href="/styles/eulerbooks.css" />
<link rel="icon" href="/images/favicon.ico" />
<title>Eulerbooks</title>
</head>
<body>
<header>
<p><a id="homelink" href="/">dairydemon.net</a></p>
</header>
<main>
<article>
<img id="euler-badge" src="https://projecteuler.net/profile/filifa.png" alt="a badge showing filifa's up-to-date Project Euler statistics (solved 168 as of 2025-07-27)" width="200px" height="60px"/>
<h1 id="eulerbooks">Eulerbooks</h1>
<p>This is a collection of Jupyter notebooks containing solutions and
discussions for the first 100 <a
href="https://projecteuler.net">Project Euler problems</a> using <a
href="https://www.sagemath.org">SageMath</a>.</p>
<p>My main goal with these notebooks is not simply to provide working
code for solving the problems. Frequently, solutions to these problems
are short, but theyre not always easy to follow without understanding
some important mathematical principles. Therefore, my aim is to provide
insight into the underlying algorithms and mathematical concepts that
make an efficient solution possible. I personally find that these
topics are frequently even more interesting than the problems
themselves, which I see as mainly existing to provide situations to
apply the concepts after learning about them. In short, its more about
the journey, not the destination, so these notebooks mainly exist to
discuss the former.</p>
<h2 id="approach">Approach</h2>
<p>Frequently, either Python or SageMath provide functions and
libraries that make it trivially easy to write a solution. I dont have
a problem with presenting solutions that use these, since for practical
purposes, its better to use whats already available than to reinvent
the wheel. It also tends to lead to code that is easy to read and
understand, which is the best kind of code.</p>
<p>However, when a function already exists that does the heavy lifting,
I also tend to provide my own basic implementation and an explanation
of why it works. This is especially true if a solution or algorithm is
based off of an important mathematical concept that is not especially
intuitive.</p>
<p>When not especially tedious, I like writing up solutions that do not
require programming at all, since these approaches often require
interesting mathematical techniques.</p>
<p>Another thing to note is that I dont prioritize a solutions
performance above all. When a solution is fast enough (using Project
Eulers own “one-minute rule” as a rule of thumb), I instead usually
focus on making the code easy to read. You can basically always
optimize, but there are frequently diminishing returns, and it tends to
negatively impact readability. Once a solution is fast enough to solve
the problem at hand, I only consider optimizing further if the concepts
are reusable.</p>
<h2 id="solutions">Solutions</h2>
<p>Solutions are provided as non-interactive HTML renderings that you
can view directly in your browser. Alternatively, you can download the
Jupyter notebooks to play with them yourself. I've also marked some of
my favorite problems.</p>
<table>
<caption>
Project Euler solutions
</caption>
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">HTML</th>
<th scope="col">Notebook</th>
<th scope="col">Favorite?</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td><a href="html/problem0001.html">View</a></td>
<td><a href="notebooks/problem0001.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">2</th>
<td><a href="html/problem0002.html">View</a></td>
<td><a href="notebooks/problem0002.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">3</th>
<td><a href="html/problem0003.html">View</a></td>
<td><a href="notebooks/problem0003.ipynb">Download</a></td>
<td>Yes</td>
</tr>
<tr>
<th scope="row">4</th>
<td><a href="html/problem0004.html">View</a></td>
<td><a href="notebooks/problem0004.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">5</th>
<td><a href="html/problem0005.html">View</a></td>
<td><a href="notebooks/problem0005.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">6</th>
<td><a href="html/problem0006.html">View</a></td>
<td><a href="notebooks/problem0006.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">7</th>
<td><a href="html/problem0007.html">View</a></td>
<td><a href="notebooks/problem0007.ipynb">Download</a></td>
<td>Yes</td>
</tr>
<tr>
<th scope="row">8</th>
<td><a href="html/problem0008.html">View</a></td>
<td><a href="notebooks/problem0008.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">9</th>
<td><a href="html/problem0009.html">View</a></td>
<td><a href="notebooks/problem0009.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">10</th>
<td><a href="html/problem0010.html">View</a></td>
<td><a href="notebooks/problem0010.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">11</th>
<td><a href="html/problem0011.html">View</a></td>
<td><a href="notebooks/problem0011.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">12</th>
<td><a href="html/problem0012.html">View</a></td>
<td><a href="notebooks/problem0012.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">13</th>
<td><a href="html/problem0013.html">View</a></td>
<td><a href="notebooks/problem0013.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">14</th>
<td><a href="html/problem0014.html">View</a></td>
<td><a href="notebooks/problem0014.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">15</th>
<td><a href="html/problem0015.html">View</a></td>
<td><a href="notebooks/problem0015.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">16</th>
<td><a href="html/problem0016.html">View</a></td>
<td><a href="notebooks/problem0016.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">17</th>
<td><a href="html/problem0017.html">View</a></td>
<td><a href="notebooks/problem0017.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">18</th>
<td><a href="html/problem0018.html">View</a></td>
<td><a href="notebooks/problem0018.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">19</th>
<td><a href="html/problem0019.html">View</a></td>
<td><a href="notebooks/problem0019.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">20</th>
<td><a href="html/problem0020.html">View</a></td>
<td><a href="notebooks/problem0020.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">21</th>
<td><a href="html/problem0021.html">View</a></td>
<td><a href="notebooks/problem0021.ipynb">Download</a></td>
<td>Yes</td>
</tr>
<tr>
<th scope="row">22</th>
<td><a href="html/problem0022.html">View</a></td>
<td><a href="notebooks/problem0022.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">23</th>
<td><a href="html/problem0023.html">View</a></td>
<td><a href="notebooks/problem0023.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">24</th>
<td><a href="html/problem0024.html">View</a></td>
<td><a href="notebooks/problem0024.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">25</th>
<td><a href="html/problem0025.html">View</a></td>
<td><a href="notebooks/problem0025.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">26</th>
<td><a href="html/problem0026.html">View</a></td>
<td><a href="notebooks/problem0026.ipynb">Download</a></td>
<td>Yes</td>
</tr>
<tr>
<th scope="row">27</th>
<td><a href="html/problem0027.html">View</a></td>
<td><a href="notebooks/problem0027.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">28</th>
<td><a href="html/problem0028.html">View</a></td>
<td><a href="notebooks/problem0028.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">29</th>
<td><a href="html/problem0029.html">View</a></td>
<td><a href="notebooks/problem0029.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">30</th>
<td><a href="html/problem0030.html">View</a></td>
<td><a href="notebooks/problem0030.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">31</th>
<td><a href="html/problem0031.html">View</a></td>
<td><a href="notebooks/problem0031.ipynb">Download</a></td>
<td>Yes</td>
</tr>
<tr>
<th scope="row">32</th>
<td><a href="html/problem0032.html">View</a></td>
<td><a href="notebooks/problem0032.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">33</th>
<td><a href="html/problem0033.html">View</a></td>
<td><a href="notebooks/problem0033.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">34</th>
<td><a href="html/problem0034.html">View</a></td>
<td><a href="notebooks/problem0034.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">35</th>
<td><a href="html/problem0035.html">View</a></td>
<td><a href="notebooks/problem0035.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">36</th>
<td><a href="html/problem0036.html">View</a></td>
<td><a href="notebooks/problem0036.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">37</th>
<td><a href="html/problem0037.html">View</a></td>
<td><a href="notebooks/problem0037.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">38</th>
<td><a href="html/problem0038.html">View</a></td>
<td><a href="notebooks/problem0038.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">39</th>
<td><a href="html/problem0039.html">View</a></td>
<td><a href="notebooks/problem0039.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">40</th>
<td><a href="html/problem0040.html">View</a></td>
<td><a href="notebooks/problem0040.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">41</th>
<td><a href="html/problem0041.html">View</a></td>
<td><a href="notebooks/problem0041.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">42</th>
<td><a href="html/problem0042.html">View</a></td>
<td><a href="notebooks/problem0042.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">43</th>
<td><a href="html/problem0043.html">View</a></td>
<td><a href="notebooks/problem0043.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">44</th>
<td><a href="html/problem0044.html">View</a></td>
<td><a href="notebooks/problem0044.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">45</th>
<td><a href="html/problem0045.html">View</a></td>
<td><a href="notebooks/problem0045.ipynb">Download</a></td>
<td>Yes</td>
</tr>
<tr>
<th scope="row">46</th>
<td><a href="html/problem0046.html">View</a></td>
<td><a href="notebooks/problem0046.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">47</th>
<td><a href="html/problem0047.html">View</a></td>
<td><a href="notebooks/problem0047.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">48</th>
<td><a href="html/problem0048.html">View</a></td>
<td><a href="notebooks/problem0048.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">49</th>
<td><a href="html/problem0049.html">View</a></td>
<td><a href="notebooks/problem0049.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">50</th>
<td><a href="html/problem0050.html">View</a></td>
<td><a href="notebooks/problem0050.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">51</th>
<td><a href="html/problem0051.html">View</a></td>
<td><a href="notebooks/problem0051.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">52</th>
<td><a href="html/problem0052.html">View</a></td>
<td><a href="notebooks/problem0052.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">53</th>
<td><a href="html/problem0053.html">View</a></td>
<td><a href="notebooks/problem0053.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">54</th>
<td><a href="html/problem0054.html">View</a></td>
<td><a href="notebooks/problem0054.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">55</th>
<td><a href="html/problem0055.html">View</a></td>
<td><a href="notebooks/problem0055.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">56</th>
<td><a href="html/problem0056.html">View</a></td>
<td><a href="notebooks/problem0056.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">57</th>
<td><a href="html/problem0057.html">View</a></td>
<td><a href="notebooks/problem0057.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">58</th>
<td><a href="html/problem0058.html">View</a></td>
<td><a href="notebooks/problem0058.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">59</th>
<td><a href="html/problem0059.html">View</a></td>
<td><a href="notebooks/problem0059.ipynb">Download</a></td>
<td>Yes</td>
</tr>
<tr>
<th scope="row">60</th>
<td><a href="html/problem0060.html">View</a></td>
<td><a href="notebooks/problem0060.ipynb">Download</a></td>
<td>Yes</td>
</tr>
<tr>
<th scope="row">61</th>
<td><a href="html/problem0061.html">View</a></td>
<td><a href="notebooks/problem0061.ipynb">Download</a></td>
<td>Yes</td>
</tr>
<tr>
<th scope="row">62</th>
<td><a href="html/problem0062.html">View</a></td>
<td><a href="notebooks/problem0062.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">63</th>
<td><a href="html/problem0063.html">View</a></td>
<td><a href="notebooks/problem0063.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">64</th>
<td><a href="html/problem0064.html">View</a></td>
<td><a href="notebooks/problem0064.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">65</th>
<td><a href="html/problem0065.html">View</a></td>
<td><a href="notebooks/problem0065.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">66</th>
<td><a href="html/problem0066.html">View</a></td>
<td><a href="notebooks/problem0066.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">67</th>
<td><a href="html/problem0067.html">View</a></td>
<td><a href="notebooks/problem0067.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">68</th>
<td><a href="html/problem0068.html">View</a></td>
<td><a href="notebooks/problem0068.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">69</th>
<td><a href="html/problem0069.html">View</a></td>
<td><a href="notebooks/problem0069.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">70</th>
<td><a href="html/problem0070.html">View</a></td>
<td><a href="notebooks/problem0070.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">71</th>
<td><a href="html/problem0071.html">View</a></td>
<td><a href="notebooks/problem0071.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">72</th>
<td><a href="html/problem0072.html">View</a></td>
<td><a href="notebooks/problem0072.ipynb">Download</a></td>
<td>Yes</td>
</tr>
<tr>
<th scope="row">73</th>
<td><a href="html/problem0073.html">View</a></td>
<td><a href="notebooks/problem0073.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">74</th>
<td><a href="html/problem0074.html">View</a></td>
<td><a href="notebooks/problem0074.ipynb">Download</a></td>
<td>Yes</td>
</tr>
<tr>
<th scope="row">75</th>
<td><a href="html/problem0075.html">View</a></td>
<td><a href="notebooks/problem0075.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">76</th>
<td><a href="html/problem0076.html">View</a></td>
<td><a href="notebooks/problem0076.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">77</th>
<td><a href="html/problem0077.html">View</a></td>
<td><a href="notebooks/problem0077.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">78</th>
<td><a href="html/problem0078.html">View</a></td>
<td><a href="notebooks/problem0078.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">79</th>
<td><a href="html/problem0079.html">View</a></td>
<td><a href="notebooks/problem0079.ipynb">Download</a></td>
<td>Yes</td>
</tr>
<tr>
<th scope="row">80</th>
<td><a href="html/problem0080.html">View</a></td>
<td><a href="notebooks/problem0080.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">81</th>
<td><a href="html/problem0081.html">View</a></td>
<td><a href="notebooks/problem0081.ipynb">Download</a></td>
<td>Yes</td>
</tr>
<tr>
<th scope="row">82</th>
<td><a href="html/problem0082.html">View</a></td>
<td><a href="notebooks/problem0082.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">83</th>
<td><a href="html/problem0083.html">View</a></td>
<td><a href="notebooks/problem0083.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">84</th>
<td><a href="html/problem0084.html">View</a></td>
<td><a href="notebooks/problem0084.ipynb">Download</a></td>
<td>Yes</td>
</tr>
<tr>
<th scope="row">85</th>
<td><a href="html/problem0085.html">View</a></td>
<td><a href="notebooks/problem0085.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">86</th>
<td><a href="html/problem0086.html">View</a></td>
<td><a href="notebooks/problem0086.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">87</th>
<td><a href="html/problem0087.html">View</a></td>
<td><a href="notebooks/problem0087.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">88</th>
<td><a href="html/problem0088.html">View</a></td>
<td><a href="notebooks/problem0088.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">89</th>
<td><a href="html/problem0089.html">View</a></td>
<td><a href="notebooks/problem0089.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">90</th>
<td><a href="html/problem0090.html">View</a></td>
<td><a href="notebooks/problem0090.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">91</th>
<td><a href="html/problem0091.html">View</a></td>
<td><a href="notebooks/problem0091.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">92</th>
<td><a href="html/problem0092.html">View</a></td>
<td><a href="notebooks/problem0092.ipynb">Download</a></td>
<td>Yes</td>
</tr>
<tr>
<th scope="row">93</th>
<td><a href="html/problem0093.html">View</a></td>
<td><a href="notebooks/problem0093.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">94</th>
<td><a href="html/problem0094.html">View</a></td>
<td><a href="notebooks/problem0094.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">95</th>
<td><a href="html/problem0095.html">View</a></td>
<td><a href="notebooks/problem0095.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">96</th>
<td><a href="html/problem0096.html">View</a></td>
<td><a href="notebooks/problem0096.ipynb">Download</a></td>
<td>Yes</td>
</tr>
<tr>
<th scope="row">97</th>
<td><a href="html/problem0097.html">View</a></td>
<td><a href="notebooks/problem0097.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">98</th>
<td><a href="html/problem0098.html">View</a></td>
<td><a href="notebooks/problem0098.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">99</th>
<td><a href="html/problem0099.html">View</a></td>
<td><a href="notebooks/problem0099.ipynb">Download</a></td>
<td></td>
</tr>
<tr>
<th scope="row">100</th>
<td><a href="html/problem0100.html">View</a></td>
<td><a href="notebooks/problem0100.ipynb">Download</a></td>
<td></td>
</tr>
</tbody>
</table>
</article>
</main>
</body>
</html>