Karim Belabas on Fri, 20 Feb 2015 20:51:13 +0100


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: moebius function


* Charles Greathouse [2015-02-20 18:43]:
> > N.B. sum(x=1,n, moebius(x)) is a simpler form for the same computation.
> 
> Yes. I tried to do it more cleverly once:
[...]
> Mertens(n, M=0)={
> if(n<4, return(2-n));
> if(!M,
> M=muTable(sqrtint(n));
> for(i=2, #M, M[i]+=M[i-1])
> );
> my(cross1=n\(#M-1), cross2=n\(sqrtint(n)+1));
> 1-sum(d=2, min(cross1, cross2),
> Mertens(n\d, M)
> )-sum(d=cross1+1, cross2,
> M[n\d]
> )-sum(k=1, sqrtint(n),
> (n\k-n\(k+1))*M[k]
> )
> };
> 
> but it ended up being slower than the naive sum(k=1,n,moebius(k)). Sad.

The O(n^(1/2)) small values of d in the first inner sum kill you
(=> O~(n) algorithm). You can easily improve on this:

  http://projecteuclid.org/download/pdf_1/euclid.em/1047565447

(=> O~(n^(2/3)) algorithm)

Cheers,

    K.B.
--
Karim Belabas, IMB (UMR 5251)  Tel: (+33) (0)5 40 00 26 17
Universite de Bordeaux         Fax: (+33) (0)5 40 00 69 50
351, cours de la Liberation    http://www.math.u-bordeaux.fr/~kbelabas/
F-33405 Talence (France)       http://pari.math.u-bordeaux.fr/  [PARI/GP]
`