The classical Möbius function: μ(n) is an important multiplicative function in number theory and combinatorics.

There are several ways to implement a Möbius function.

A fairly straightforward method is to find the prime factors of a positive integer n, then define μ(n) based on the sum of the primitive factors. It has the values {−1, 0, 1} depending on the factorization of n:

 μ(1) is defined to be 1.
 μ(n) = 1 if n is a square-free positive integer with an even number of prime factors.
 μ(n) = −1 if n is a square-free positive integer with an odd number of prime factors.
 μ(n) = 0 if n has a squared prime factor.


Task

 Write a routine (function, procedure, whatever) μ(n) to find the Möbius number for a positive integer n.
 Use that routine to find and display here, on this page, at least the first 99 terms in a grid layout. (Not just one long line or column of numbers.)


See also

 Wikipedia: Möbius function


Related Tasks

 Mertens function


local fn IsPrime( n as long ) as BOOL
  BOOL result = YES
  long i
 
  if ( n < 2 ) then result = NO : exit fn
 
  for i = 2 to n + 1
    if ( i * i <= n ) and ( n mod i == 0 )
      result = NO : exit fn
    end if
  next
end fn = result
 
local fn Mobius( n as long ) as long
  long i, p = 0, result = 0
 
  if ( n == 1 ) then result = 1 : exit fn
 
  for i = 1 to n + 1
    if ( n mod i == 0 ) and ( fn IsPrime( i ) == YES )
      if ( n mod ( i * i ) == 0 )
        result = 0 : exit fn
      else
        p++
      end if
    end if
  next
 
  if( p mod 2 != 0 )
    result = -1
  else
    result = 1
  end if
end fn = result
 
window 1, @"Möbius function", (0,0,600,300)
 
printf @"First 100 terms of Mobius sequence:"
 
long i
for i = 1 to 100
  printf @"%2ld\t", fn Mobius(i)
  if ( i mod 20 == 0 ) then print
next
 
HandleEvents