We've covered quite a bit here.
Yes. Yes we have.
Despite that, the topics here certainly haven't exhausted my own personal questions. If anything, I'm just left with more. So I do want to note some of those questions.
Go ahead.
We worked through a number of examples where we started with our basic recursive form for $\Pi(n)$, and then we extended it by altering the definition with a helper function. And that usually had some interesting mathematical impact.
Right.
So, needless to say, one obvious and basic question is if there are other such helper functions that might be similarly insightful somehow.
That makes sense, sure.
Such an example that I left criminally uncovered here - as I mostly avoided complex numbers - is the following. If $\chi(j)$ is some Dirichlet character, and you define $f_k(n,j)$ as $$f_k(n,j)=\rec{\rr{\chi(j) \cdot }(\frac{1}{k}-f_{k+1}(\frac{n}{j},2)) + f_k (n, j+1)}$$ then you can compute a weighted prime power count, with Dirichlet characters applied, as $$f_1(n,2) = \sum_{p^k \le n} \frac{\chi(p^k)}{k}$$ So that's one such example of what I'm talking about.
That makes sense.
At any rate, many of the helper functions we looked at connected to $\log \zeta(s)$ in some straightforward way, so that suggests a bunch of well understood such helper functions from the $\log \zeta(s)$ equivalents. But I am curious if there are other such helper functions that particularly interact with the partial sum nature of the convolutions in interesting or unexpected ways.
Right, I can see that as an interesting line of questioning.
Alright. I hope the range of animations, running code, and discussions here has been engaging and curiosity-provoking. I really hope, especially, that the connections here between $\Pi(n)$ and $\mathrm{li(n)}$ come across as natural and compelling to anyone following along as they do to me.
Fourier / Laplace / Mellin transforms are fascinating, powerful, and beautiful for all sorts of reasons, but certainly in the context of the kinds of ideas we've explored here, their ability to convert convolution into multiplication must be one of their most almost magical features. But their introduction really does come at the expense of introducing some seriously challenging mathematical concepts along the way. Because normal current programming languages have a lot more aptitude at crunching through convolution calculations than they do wrestling with analytic questions of convergence, I hope at the very, very least that these articles are a nice model of what leaning into that fact might look like.
Anyway, if you've followed along with me this far, thanks so much! I hope you found something interesting and worthwhile in all of this!
Nathan McKenzie
August 2025
Dedicated to Eleanor, Will, and Bev, who didn't know their role in all this, and Annette, who did a bit
And a big thanks to the following indispensable JavaScript libraries: KaTeX, rainbow, d3, function-plot, math, and vis
P. S. I have a lot more incomplete animations, live code, and other number theory and math explorations like this that I'm trying to put out publicly. But I'm struggling to find a way to make this work, just in terms of time and resources. If you happen to be on friendly terms with any wealthy benefactors / tech moguls / foundation heads, or are yourself such a person, and this work is the sort of thing you'd appreciate supporting, let let me know!
I'd like to include a bit of personal history connected to these ideas at the end here. Feel free to skip this bit if you're just here for the exciting animating graphs.
Of course, of course.
I hope the discussion here has been useful, interesting, curiosity-provoking, and that it all stands on its own as some kind of resource.
To be a bit explicit, many results here are the product of my own incessant questioning, computational exploration, and fiddling with equations. I absolutely try to reference other sources if I'm familiar with them at the time of writing, but as a fairly solitary amateur, I just have limits on how wide my knowledge is of prior results. And for better or worse, my own personal curiosities, and the questions I want to ask, about math seem somewhat out of sync with certain broader tendencies in academic math. So I end up doing a lot more computational experiments than reading rigorous papers. I intend this as neither an apology nor a defense, but simply a pragmatic reflection. So think of this as a travelogue. I went here, I dug through this, here were my efforts to understand what I found, this was fascinating to me.
Given that general preamble, though, here is just a bit more specific personal history on that front, though just a bit.
Okay.
So, the core of the original recursive form, or at least my own experience with it, dates back to work I did in October of 2004. I've written about my actual history of that specifically at very great length elsewhere.
Right.
A bit later, in early 2011, I evolved my $O(n^{\frac{2}{3}+\epsilon}) $ time, $ O(n^{\frac{1}{3}+\epsilon}) $ space prime counting algorithm, and I had a burst of enthusiasm, as well as my first really shaky attempts at writing up a bunch of results, a topic I still struggle with to this day. It was during that window of time I explored different relationships between the generalized count of divisors $d_z(n)$ and the weighted count of prime powers $\frac{\Lambda(n)}{\log n}$, which led to some of the observations I reference in this discussion.
Okay. Anything else?
Not really; the second half of this discussion involved a lot more personal history and research, I think, and so I detail those experiences there. And I hope you'll consider exploring that. I think it covers some much bigger ideas.
Fair enough.
So that's that. Again, if you've read this far, I hope you got something out of this all, and thanks for working through these ideas with me!