// Method A: Bit-counting
function isPowerOfTwoA(x: number): boolean {
if (x <= 0) return false;
return x.toString(2).split("1").length - 1 === 1;
}
// Method B: Bitwise trick
function isPowerOfTwoB(x: number): boolean {
return x > 0 && (x & (x - 1)) === 0;
}
// Method C: Repeated division
function isPowerOfTwoC(x: number): boolean {
if (x <= 0) return false;
while (x % 2 === 0) {
x /= 2;
}
return x === 1;
}
// Method D: Using logarithms
function isPowerOfTwoD(x: number): boolean {
if (x <= 0) return false;
const logv = Math.log2(x);
return Math.abs(logv - Math.round(logv)) < 1e-10;
}
const test1 = 16; // true
const test2 = 18; // false
console.log("A:", isPowerOfTwoA(test1), ",", isPowerOfTwoA(test2));
console.log("B:", isPowerOfTwoB(test1), ",", isPowerOfTwoB(test2));
console.log("C:", isPowerOfTwoC(test1), ",", isPowerOfTwoC(test2));
console.log("D:", isPowerOfTwoD(test1), ",", isPowerOfTwoD(test2));
/*
OUTPUT:
A: true , false
B: true , false
C: true , false
D: true , false
*/