From 38436ba0bb8825d37fa6372cbfabb57ff810fe45 Mon Sep 17 00:00:00 2001 From: Akshay Dubey Date: Wed, 14 Sep 2022 12:27:01 +0530 Subject: [PATCH 1/2] feat: Add Liouville algorithm --- Maths/LiouvilleFunction.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Maths/LiouvilleFunction.js diff --git a/Maths/LiouvilleFunction.js b/Maths/LiouvilleFunction.js new file mode 100644 index 0000000000..f13916d55d --- /dev/null +++ b/Maths/LiouvilleFunction.js @@ -0,0 +1,25 @@ +/* + * Author: Akshay Dubey (https://github.com/itsAkshayDubey) + * Liouville Function: https://en.wikipedia.org/wiki/Liouville_function + * For any positive integer n, define λ(n) as the sum of the primitive nth roots of unity. + * It has values in {−1, 1} depending on the factorization of n into prime factors: + * λ(n) = +1 if n positive integer with an even number of prime factors. + * λ(n) = −1 if n positive integer with an odd number of prime factors. + */ + +/** + * @function liouvilleFunction + * @description -> This method returns λ(n) of given number n + * returns 1 when number has even number of prime factors + * returns -1 when number has odd number of prime factors + * @param {Integer} number + * @returns {Integer} 1|-1 + */ + +import { PrimeFactors } from './PrimeFactors.js' +export const liouvilleFunction = (number) => { + if (number <= 0) { + throw new Error('Number must be greater than zero.') + } + return PrimeFactors(number).length % 2 === 0 ? 1 : -1 +} From 016942d19c7d37ec143ca5a989987426cd3bb1a8 Mon Sep 17 00:00:00 2001 From: Akshay Dubey Date: Wed, 14 Sep 2022 12:27:17 +0530 Subject: [PATCH 2/2] test: Add unit tests for Liouville algorithm --- Maths/test/LiouvilleFunction.test.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Maths/test/LiouvilleFunction.test.js diff --git a/Maths/test/LiouvilleFunction.test.js b/Maths/test/LiouvilleFunction.test.js new file mode 100644 index 0000000000..58a79c9cc2 --- /dev/null +++ b/Maths/test/LiouvilleFunction.test.js @@ -0,0 +1,19 @@ +import { liouvilleFunction } from '../LiouvilleFunction' + +const expectedValuesArray = [1, -1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, -1, 1, 1, 1, -1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, -1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, 1, -1, 1, 1, 1, 1, -1, -1, -1, 1] + +describe('Testing liouville function', () => { + for (let i = 1; i <= 100; i++) { + it('Testing for number = ' + i + ', should return ' + expectedValuesArray[i], () => { + expect(liouvilleFunction(i)).toBe(expectedValuesArray[i - 1]) + }) + } + + it('should throw error when supplied negative numbers', () => { + expect(() => { liouvilleFunction(-1) }).toThrow(Error) + }) + + it('should throw error when supplied zero', () => { + expect(() => { liouvilleFunction(0) }).toThrow(Error) + }) +}) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy