This is a really nice explanation -- it flowed really well, and I liked the sieve approach to proving the product-over-primes formula (the other standard way relies on a clever trick, and being clever is fun-but-not-good-for-exposition).
I did get hung up on the complex graph showing the first few non-trivial zeros. It's a very busy graph! I ended up realizing that you graphed the contours Re(zeta(s))=0 and Im(zeta(s))=0.
I did get hung up on the complex graph showing the first few non-trivial zeros. It's a very busy graph! I ended up realizing that you graphed the contours Re(zeta(s))=0 and Im(zeta(s))=0.