19

Say you want to check that $|\sum_{n\leq x} \mu(n)|\leq \sqrt{x}$ for all $x\leq X$. (I am actually interested in checking that $\sum_{n\leq x} \mu(n)/n|\leq c/\sqrt{x}$, where $c$ is a constant, and in finding the best $c$ such that this is true in a given range, such as $3\leq x\leq X$, say; all of these problems are evidently related.)

The natural algorithm (the same you can find in section 4 of [1], say) has running time $O(X \log \log X)$ and takes space $O(\sqrt{X})$ (where we think of integers as taking constant space). I've coded it with some optimizations (for $\sum_{n\leq x} \mu(n)/n$, using interval arithmetic) and should have a result for $x=10^{14}$ in about a fortnight; $x=10^{12}$ takes an afternoon. (When I first coded this, less carefully and on worse hardware, it took a week.)

Is it possible to do things in either less time or less space? Space is important here in practice - ideally you would want to keep everything in cache, and it is rare to have more than 4MB per processor core - that is, enough for $1.6\cdot 10^7$ values of $\mu$, or $5\cdot 10^5$ large integers.

Notice that I am asking for a check for all $x\leq X$, and not just for a single $x=X$.


Further remarks: I am aware that there are algorithms for computing a single value of $\sum_{n\leq x} \mu(n)$ in time $O(x^{2/3} \log \log x)$ [2], or even (in what looks like a more sophisticated but less practical way that may have never been coded) in time $O(x^{1/2+\epsilon})$ ([3]; see also Mertens' function in time $O(\sqrt x)$). Once can of course use such an algorithm to compute the sum for values of $x$ that are about $c\sqrt{x}$ apart, and then use what I've called the "natural" algorithm to deal with intervals in which such a computation shows that the statement to be verified could be violated. This results in a running time of $O(x^{7/6} \log \log x)$, or $O(x^{1+\epsilon})$, and while memory usage could be decreased by applying the "natural" algorithm on intervals of length smaller than $\sqrt{x}$, this would result in a longer running time.

The same is true, of course, of the "natural" algorithm itself: one could store a list of primes $p\leq \sqrt{x}$ in the main memory in $\sqrt{x}$ bits, and compute $\mu(m)$ in blocks of size $M$ at a time; this would require working in memory $O(M)$ (to be stored in the cache) for the most part, but the running time would be $O(x^{3/2}/M)$. Or is there a way around this? Can one, say, select the primes $p\leq \sqrt{x}$ that might divide integers in an interval of length $M \lll \sqrt{x}$, and do so in time less than $\sqrt{x}$ or $\sqrt{x}/\log x$? Or is there any other way to take space substantially less than $O(\sqrt{x})$ while still having essentially linear running time? Or a way to have better than linear running time?

PS. I could also ask about parallelising this, but I would not like to risk making the discussion too hardware-specific here.

[1] François Dress, MR 1259423 Fonction sommatoire de la fonction de Möbius. I. Majorations expérimentales, Experiment. Math. 2 (1993), no. 2, 89--98.

[2] Marc Deléglise and Joël Rivat, MR 1437219 Computing the summation of the Möbius function, Experiment. Math. 5 (1996), no. 4, 291--295.

[3] J. C. Lagarias, and A. M. Odlyzko, MR 0890871 Computing $\pi(x)$: an analytic method, J. Algorithms 8 (1987), no. 2, 173--191.

H A Helfgott
  • 19,290
  • Do you mean $\sqrt{x}$ or $\sqrt{X}$? If the latter, there is a simple sieving process that computes the sum on the fly, and you can save extremal values for later processing and check that the inequality is satisfied. You can even sift just the squarefree values for processing. The memory storage is $O(\log X)$ bits for each prime at most $\sqrt{X}$. The runtime should be not much longer than $O(X\log\log X)$. Gerhard "Sometimes Has Xtreme Case Sensitivity" Paseman, 2016.04.25. – Gerhard Paseman Apr 25 '16 at 22:48
  • It may be that I am talking about the "natural algorithm" already, which is a variant of the one at http://mathoverflow.net/a/50691 for determining distinct prime factors of integers up to X in a serial fashion. However I still wonder what parameter you are talking about for space usage. Gerhard "Space Usage: The Final Frontier" Paseman, 2016.04.25. – Gerhard Paseman Apr 25 '16 at 23:22
  • the simplest algorithm for checking $M(x)$ not for every $x \le X$ but for every $x = \lfloor X/n\rfloor$ is by using $\sum_{n=1}^x M(x/n) = 1$, and computing $M(k)$ for every different $k \in { \lfloor X/n \rfloor }$, it takes $\mathcal{O}(X)$ additions and $\mathcal{O}(\sqrt{X}\log X)$ in space – reuns Apr 25 '16 at 23:27
  • Gerhard: that's exactly what I mean by "the natural algorithm". – H A Helfgott Apr 26 '16 at 00:34
  • And yes, the running time is as you said and I said. I'm looking for something better. – H A Helfgott Apr 26 '16 at 00:36
  • You might consider "faulty" versions of the natural algorithm, where one computes the wrong value on some of the values, or forgets to store the primes above cube root of X. You might still be able to show the error is small enough that the inequalities you want to check are preserved. Gerhard "Faulty Computing Isn't Computationally Wrong" Paseman, 2016.04.25. – Gerhard Paseman Apr 26 '16 at 00:52
  • Well, numbers of size about $X$ without prime factors between $X^(1/3)$ and $X^{1/2}$ are very roughly as common as the primes - but the sum of the reciprocals of the primes diverges. Or rather - the sum $\sum_n 1/n$ over all $X\leq n<2X$ without such prime factors is about a constant times $1/\log X$, i.e., much larger than $1/\sqrt{X}$. The same happens if you work over much smaller intervals. So I'm afraid this cannot work as stated. – H A Helfgott Apr 26 '16 at 12:11

0 Answers0