func_code_string: #include <bits/stdc++.h>   int query(long long q) {     printf( ? %lld n , q);     fflush(stdout);     int gcd;     scanf( %d , &gcd);     return gcd;   }   void printAnswer(int answer) {     printf( ! %d n , answer);     fflush(stdout);   }   const int MAX_PRIMES = 617;   const int MAX_X = 1000 * 1000 * 1000;   const long long MAX_QUERY = 1000LL * 1000LL * 1000LL * 1000LL * 1000LL * 1000LL;   bool isPrime[1 + MAX_PRIMES];   int main() {     for (int i = 2; i <= MAX_PRIMES; i++) {       isPrime[i] = true;     }     std::vector<long long> queries;     queries.push_back(1);     for (int p = 2; p <= MAX_PRIMES; p++) {       if (isPrime[p]) {         for (int m = p * p; m <= MAX_PRIMES; m += p) {           isPrime[m] = false;         }         if (queries.back() <= MAX_QUERY / p) {           long long b = queries.back();           queries.pop_back();           queries.push_back(b * p);         } else {           queries.push_back(p);         }       }     }     int t;     scanf( %d , &t);     for (int _ = 0; _ < t; _++) {       std::vector<int> primeDivs;       for (long long q : queries) {         int gcd = query(q);         for (int p = 2; p <= MAX_PRIMES; p++) {           if (gcd % p == 0) {             primeDivs.push_back(p);             while (gcd % p == 0) {               gcd /= p;             }           }         }       }       for (int &p : primeDivs) {         int copy = p;         while (p <= MAX_X / copy) {           p *= copy;         }       }       if (primeDivs.size() % 2 == 1) {         primeDivs.push_back(1);       }       int sureAnswer = 1;       for (int i = 0; i < (int)primeDivs.size(); i += 2) {         long long q = (long long)primeDivs[i] * primeDivs[i + 1];         int gcd = query(q);         for (int p = 2; p <= MAX_PRIMES; p++) {           int exp = 0;           while (gcd % p == 0) {             gcd /= p;             exp++;           }           sureAnswer *= exp + 1;         }       }       int guessAnswer = std::max(sureAnswer + 7, sureAnswer * 2);       printAnswer(guessAnswer);       primeDivs.clear();     }     return 0;   }   