Mobius Function in java

The MOBIUS function M(N) for a natural number N is defined as follows:

  1. M(N) = 1                          if N = 1

2. M(N) = 0                          if  any prime factor of N is contained in N more than once

3. M(N) = (-1)p                    if N is a product of ‘p’ distinct prime factors

Example :

M(78) = -1                ( for 78 = 2 * 3 * 13     M(78) = ( -1)3 = -1 )

M(34) = 1                 ( for 34 = 2 * 17           M(34) = ( -1)2 = 1 )

M(12) = 0                 ( for 12 = 2 * 2 * 3       M(12) = 0 for 2 appears two times)

M(17) = -1                ( for 17 = 17                 M(17) = ( -1)1 = -1 )

import java.util.*;
class MobiusFun
{
    int n;
     
    MobiusFun()
    {
        n = 0;
    }
     
    void input()
    {
        Scanner sc = new Scanner(System.in);    
        System.out.print("Enter a number : ");
        n = sc.nextInt();
    }
     
    /*  The function primefac() either returns '0' if prime factors are repeated
     *  or returns the no.of prime factors */
    int primeFac()
    {
        int a=n, i=2, m=0, c=0, f=0;
             
        while(a > 1) // loop to generate prime factors
        {
            c = 0; // variable to store frequency of every prime factor
            while(a%i == 0) // if 'i' is a prime factor
            {
                c++; // counting frequency of 'i'
                f++; // counting no of prime factors
                a=a/i;
            }
                i++;
 
            if(c > 1) // returning '0' if prime factors are repeated
                return 0;
        }
        return f; // returning no. of prime factors
    }
     
    void display() // function to display value of mobius function
    {
        int mob,x;
        if(n == 1) // condition 1
            mob = 1;
        else
        {
            x = primeFac();
            if(x == 0) // condition 2
                mob = 0;
            else // condition 3
                mob = (int)Math.pow(-1,x);
        }
        System.out.println("Value of Mobius Function : "+mob);
    }
     public static void main(String args[])
    {
        MobiusFun ob = new MobiusFun();     
        ob.input();
        ob.display();     
    }
}

Output:

Enter a number : 56
Value of Mobius Function : 0
Enter a number : 78
Value of Mobius Function : -1
Enter a number : 34
Value of Mobius Function : 1

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.