Guest User

Untitled

a guest
Mar 20th, 2025
292
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdint>
  3. #include <vector>
  4.  
  5. constexpr int64_t min_k = 12;     // 2^12 = 4096
  6. constexpr int64_t max_k = 1e10;   // 2^(10^10)
  7.  
  8. static int64_t FindCounterexample(size_t digit_count) {
  9.     std::vector<char> digits(digit_count);
  10.     digits[0] = 1;
  11.     for (int64_t k = 1; k <= max_k; ++k) {
  12.         char carry = 0;
  13.         char has_odd = 0;
  14.         for (char &digit: digits) {
  15.             digit = 2*digit + carry;
  16.             carry = (digit >= 10);
  17.             digit -= 10*carry;
  18.             has_odd |= carry;
  19.         }
  20.         if (!has_odd && k >= min_k) {
  21.             std::cerr << "2^" << k << " = ...";
  22.             for (int i = digit_count - 1; i >= 0; --i) std::cerr << (char)(digits[i] + '0');
  23.             std::cerr << " has no odd digits in the last " << digit_count << " digits\n";
  24.             return k;
  25.         }
  26.     }
  27.     return -1;
  28. }
  29.  
  30. int main() {
  31.     size_t digit_count = 2;
  32.     while (FindCounterexample(digit_count) != -1) digit_count *= 2;
  33.     std::cerr << "Found no counterexample between 2^" << min_k << " and 2^" << max_k << " (inclusive) using " << digit_count << " digits.\n";
  34. }
  35.  
Advertisement
Add Comment
Please, Sign In to add comment