#include <iostream>
#include <cmath>
#include <string>
// return 1 if 2^n starts with prefix, else 0
bool startsWithPrefix(long long n, int prefix) {
static const double log2 = std::log10(2.0);
double x = n * log2;
double frac = x - std::floor(x);
int digits = std::to_string(prefix).size();
int leading = (int) std::pow(10, frac + digits - 1);
return leading == prefix;
}
int main() {
int prefix = 12;
for (long long n = 1; ; n++) {
if (startsWithPrefix(n, prefix)) {
std::cout << "First n = " << n << "\n";
std::cout << "2 ^ " << n << " = " << std::pow(2, 7);
break;
}
}
}
/*
run:
First n = 7
2 ^ 7 = 128
*/