diff --git a/Bit-Manipulation/IsPowerofFour.js b/Bit-Manipulation/IsPowerofFour.js new file mode 100644 index 000000000..38431f924 --- /dev/null +++ b/Bit-Manipulation/IsPowerofFour.js @@ -0,0 +1,17 @@ +/** + * @author : dev-madhurendra + * Checks whether the given number is a power of four or not. + * + * A number is considered a power of four if and only if there is a single '1' bit in its binary representation, + * and that '1' bit is at the first position, followed by an even number of '0' bits. + * + * @param {number} n - The input number to check. + * @returns {boolean} True if the number is a power of four, false otherwise. + * + * @example + * const result = isPowerOfFour(16); // Returns true (16 is 4^2) + * const result2 = isPowerOfFour(5); // Returns false (5 is not a power of four) + */ +const isPowerOfFour = (n) => ((n > 0) && ((n & n - 1) === 0) && (n % 3 === 1)) + +export { isPowerOfFour } diff --git a/Bit-Manipulation/test/IsPowerOfFour.test.js b/Bit-Manipulation/test/IsPowerOfFour.test.js new file mode 100644 index 000000000..5bd666fad --- /dev/null +++ b/Bit-Manipulation/test/IsPowerOfFour.test.js @@ -0,0 +1,14 @@ +import { isPowerOfFour } from '../IsPowerofFour' + +describe('IsPowerOfFour', () => { + it.each([ + [0, false], + [4, true], + [16, true], + [12, false], + [64, true], + [-64, false] + ])('should return the number is power of four or not', (n, expected) => { + expect(isPowerOfFour(n)).toBe(expected) + }) +})