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

1 Answer

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

*/

 



answered 5 hours ago by avibootz

Related questions

...