How to find the first power of 2 whose leading digits are 12 in Scala

1 Answer

0 votes
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

*/

 



answered 4 hours ago by avibootz

Related questions

...