def p(leading_digits, count): n_cutoff = 18 leading_digits_str = str(leading_digits) n_digits = len(leading_digits_str) j, current_leading, found = 1, 2, 0 while found < count: current_leading *= 2 j += 1 current_leading_str = str(current_leading) if current_leading_str[:n_digits] == leading_digits_str: found += 1 current_leading = int(current_leading_str[:n_cutoff]) return j def euler_686(): assert p(12, 1) == 7 assert p(12, 2) == 80 assert p(123, 45) == 12710 assert p(123, 100) == 28343 assert p(123, 1000) == 284168 return p(123, 678910) if __name__ == "__main__": solution = euler_686() print("e686.py: " + str(solution)) assert solution == 193060223