import kotlin.math.log10
import kotlin.math.floor
import kotlin.math.pow
// return true if 2^n starts with prefix, else false
fun startsWithPrefix(n: Long, prefix: Int): Boolean {
val log2v: Double = log10(2.0)
val x: Double = n * log2v
val frac: Double = x - floor(x)
// count digits in prefix
val buf: String = prefix.toString()
val digits: Int = buf.length
// compute leading digits
val leading: Int = floor(10.0.pow(frac + digits - 1)).toInt()
return leading == prefix
}
fun main() {
val prefix: Int = 12
var n: Long = 1
while (true) {
if (startsWithPrefix(n, prefix)) {
println("First n = $n")
println("2 ^ $n = ${2.0.pow(n.toDouble()).toLong()}")
break
}
n++
}
}
/*
run:
First n = 7
2 ^ 7 = 128
*/