import Foundation
// Method A: Bit‑counting
func isPowerOfTwoA(_ x: Int) -> Bool {
if x <= 0 { return false }
return x.nonzeroBitCount == 1
}
// Method B: Bitwise trick
func isPowerOfTwoB(_ x: Int) -> Bool {
return x > 0 && (x & (x - 1)) == 0
}
// Method C: Repeated division
func isPowerOfTwoC(_ x: Int) -> Bool {
if x <= 0 { return false }
var n = x
while n % 2 == 0 {
n /= 2
}
return n == 1
}
// Method D: Using logarithms
func isPowerOfTwoD(_ x: Int) -> Bool {
if x <= 0 { return false }
let logv = log2(Double(x))
return abs(logv - round(logv)) < 1e-10
}
let test1 = 16 // true
let test2 = 18 // false
print("A: \(isPowerOfTwoA(test1)), \(isPowerOfTwoA(test2))")
print("B: \(isPowerOfTwoB(test1)), \(isPowerOfTwoB(test2))")
print("C: \(isPowerOfTwoC(test1)), \(isPowerOfTwoC(test2))")
print("D: \(isPowerOfTwoD(test1)), \(isPowerOfTwoD(test2))")
/*
OUTPUT:
A: true, false
B: true, false
C: true, false
D: true, false
*/