import java.lang.Math.{log10, floor, pow}
// return true if 2^n starts with prefix, else false
def 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(pow(10, frac + digits - 1)).toInt
leading == prefix
}
@main def main(): Unit = {
val prefix: Int = 12
var n: Long = 1
while (true) do
if startsWithPrefix(n, prefix) then
println(s"First n = $n")
println(s"2 ^ $n = ${pow(2, n).toLong}")
return
n += 1
}
/*
run:
First n = 7
2 ^ 7 = 128
*/