From 1a089cc49122f558fb23fe0447637db1c9c2a721 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20M=C3=BCller?= <34514239+appgurueu@users.noreply.github.com> Date: Wed, 27 Jul 2022 15:13:07 +0200 Subject: [PATCH] merge: Fix GetEuclidGCD (#1068) * Fix GetEuclidGCD Implement the actual Euclidean Algorithm * Replace == with === * Lua > JS * Standard sucks * Oops * Update GetEuclidGCD.js * Updated Documentation in README.md Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> --- DIRECTORY.md | 1 + Maths/GetEuclidGCD.js | 42 +++++++++++++++--------------------------- 2 files changed, 16 insertions(+), 27 deletions(-) diff --git a/DIRECTORY.md b/DIRECTORY.md index 3793104e27..5a491bf570 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -18,6 +18,7 @@ * **Cellular-Automata** * [ConwaysGameOfLife](Cellular-Automata/ConwaysGameOfLife.js) * **Ciphers** + * [AffineCipher](Ciphers/AffineCipher.js) * [Atbash](Ciphers/Atbash.js) * [CaesarsCipher](Ciphers/CaesarsCipher.js) * [KeyFinder](Ciphers/KeyFinder.js) diff --git a/Maths/GetEuclidGCD.js b/Maths/GetEuclidGCD.js index 3aff8dbbeb..aa77acbcc1 100644 --- a/Maths/GetEuclidGCD.js +++ b/Maths/GetEuclidGCD.js @@ -1,32 +1,20 @@ -/* - Problem statement and Explanation : https://en.wikipedia.org/wiki/Euclidean_algorithm - - In this method, we have followed the iterative approach to first - find a minimum of both numbers and go to the next step. -*/ - /** - * GetEuclidGCD return the gcd of two numbers using Euclidean algorithm. - * @param {Number} arg1 first argument for gcd - * @param {Number} arg2 second argument for gcd - * @returns return a `gcd` value of both number. + * GetEuclidGCD Euclidean algorithm to determine the GCD of two numbers + * @param {Number} a integer (may be negative) + * @param {Number} b integer (may be negative) + * @returns {Number} Greatest Common Divisor gcd(a, b) */ -const GetEuclidGCD = (arg1, arg2) => { - // firstly, check that input is a number or not. - if (typeof arg1 !== 'number' || typeof arg2 !== 'number') { - return new TypeError('Argument is not a number.') +export function GetEuclidGCD (a, b) { + if (typeof a !== 'number' || typeof b !== 'number') { + throw new TypeError('Arguments must be numbers') } - // check that the input number is not a negative value. - if (arg1 < 1 || arg2 < 1) { - return new TypeError('Argument is a negative number.') + if (a === 0 && b === 0) return undefined // infinitely many numbers divide 0 + a = Math.abs(a) + b = Math.abs(b) + while (b !== 0) { + const rem = a % b + a = b + b = rem } - // Find a minimum of both numbers. - let less = arg1 > arg2 ? arg2 : arg1 - // Iterate the number and find the gcd of the number using the above explanation. - for (less; less >= 2; less--) { - if ((arg1 % less === 0) && (arg2 % less === 0)) return (less) - } - return (less) + return a } - -export { GetEuclidGCD }