Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Computing the Möbius function

  1. Sep 17, 2008 #1

    CRGreathouse

    User Avatar
    Science Advisor
    Homework Helper

    From the Mathematica documentation:
    SquareFreeQ[n] checks to see if n has a square prime factor. This is done by computing MoebiusMu[n] and seeing if the result is zero; if it is, then n is not squarefree, otherwise it is. Computing MoebiusMu[n] involves finding the smallest prime factor q of n. If n has a small prime factor (less than or equal to 1223), this is very fast. Otherwise, FactorInteger is used to find q.

    How does this work? I can't think of a way to compute mu(n) faster than:
    * finding a small p for which p^2 | n, or
    * finding that n is prime, or
    * checking that for all p < (n)^(1/3), p^2 does not divide n
    * factoring n, which can be faster than the third option for large n


    Edit: I checked my copy of "Open problems in number theoretic complexity, II", which has O8: Is SQUAREFREES in P? Assuming that this is still open, any algorithm known would either be superpolynomial or of unproven complexity. But even an exponential-time improvement on the naive algorithm would be of interest.
     
    Last edited: Sep 17, 2008
  2. jcsd
  3. Sep 22, 2008 #2

    CRGreathouse

    User Avatar
    Science Advisor
    Homework Helper

    The interesting line, to me, is this:
    If n has a small prime factor (less than or equal to 1223), this is very fast.

    This seems a fairly strong claim. In particular, it would mean that the "very fast" algorithm could distinguish between n = 2pq and n = 2pq^2 for large p and q.

    I saw a reference to this at http://www.marmet.org/louis/sqfgap/ :
     
  4. Sep 22, 2008 #3

    Hurkyl

    User Avatar
    Staff Emeritus
    Science Advisor
    Gold Member

    The implication cannot be true, because it would mean that if N doesn't have a small factor, that we could compute [itex]\mu(N) = -\mu(3N)[/itex], where the latter can be done rapidly.
     
  5. Sep 23, 2008 #4

    CRGreathouse

    User Avatar
    Science Advisor
    Homework Helper

    Yeah, I figured as much, thanks.

    So factoring n is pretty much the fastest way to find mu(n), right? Except in the special cases I outlined above?
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?