Files
JavaScript/Maths/MobiusFunction.js
Akshay Dubey 6f55ed4a1f algorithm: mobius function implementation (#1088)
* feat: Add mobius function implementation

* test: Add tests for mobius function

* fix: Code style fixes

* fix: Code style fixes

* fix: Store prime factors in a variable &  add throw error

* fix: Fix unit tests for zero and negative numbers

* fix: Minor code style fixes
2022-09-06 15:25:28 +05:30

30 lines
1.2 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Author: Akshay Dubey (https://github.com/itsAkshayDubey)
* Mobius Function: https://en.wikipedia.org/wiki/M%C3%B6bius_function
* For any positive integer n, define μ(n) as the sum of the primitive nth roots of unity.
* It has values in {1, 0, 1} depending on the factorization of n into prime factors:
* μ(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.
*/
/**
* @function mobiusFunction
* @description -> This method returns μ(n) of given number n
* returns 1 when number is less than or equals 1
* or number has even number of prime factors
* returns 0 when number has repeated prime factor
* returns -1 when number has odd number of prime factors
* @param {Integer} number
* @returns {Integer}
*/
import { PrimeFactors } from './PrimeFactors.js'
export const mobiusFunction = (number) => {
const primeFactorsArray = PrimeFactors(number)
if (number <= 0) {
throw new Error('Number must be greater than zero.')
}
return primeFactorsArray.length !== new Set(primeFactorsArray).size ? 0 : primeFactorsArray.length % 2 === 0 ? 1 : -1
}