import Foundation
// return true if 2^n starts with prefix, else false
func startsWithPrefix(_ n: Int64, _ prefix: Int) -> Bool {
let log2v: Double = log10(2.0)
let x: Double = Double(n) * log2v
let frac: Double = x - floor(x)
// count digits in prefix
let buf: String = String(prefix)
let digits: Int = buf.count
// compute leading digits
let leading: Int = Int(floor(pow(10.0, frac + Double(digits) - 1.0)))
return leading == prefix
}
func main() {
let prefix: Int = 12
var n: Int64 = 1
while true {
if startsWithPrefix(n, prefix) {
print("First n = \(n)")
print("2 ^ \(n) = \(Int(pow(2.0, Double(n))))")
break
}
n += 1
}
}
main()
/*
run:
First n = 7
2 ^ 7 = 128
*/