func_code_string: #include <bits/stdc++.h>   using namespace std;   bool comp[30000];   int P[30000];   int seive(int n, int* P) {     int p, q, K = 0;     comp[1] = true;     char even = 1;     for (p = 2; p * p <= n; p += 2) {       if (!comp[p]) {         for (q = p * p; q <= n; q += p * (2 - even)) comp[q] = true;       }       if (p == 2) --p, even = 0;     }     for (int i = (1); i <= (n); ++i)       if (!comp[i]) P[K++] = i;     return K;   }   int muls[30000];   int has[30000];   int main() {     int K;     cin >> K;     int lim = 2 * K * K;     int least = (K + 1) / 2;     vector<int> ans;     ans.push_back(1);     int max_added = 0;     int L = seive(5 * K, P);     for (int l = 0; l < L && ((int)ans.size()) < K; ++l) {       for (int l2 = 0; l2 < (l); ++l2) {         has[l2] = 0;         for (int i = 0; i < (((int)ans.size())); ++i)           if (!(ans[i] % P[l2])) ++has[l2];       }       int p = P[l];       set<int> tmp;       for (long long q = p; q <= lim; q *= p) {         for (int i = 0; i < ((int)ans.size()) && (ans[i] % p); ++i) {           long long new_num = 1ll * q * ans[i];           if (new_num <= lim) {             tmp.insert(new_num);           }         }       }       set<int>::iterator it = tmp.begin();       for (int i = 0; it != tmp.end() && i < least; ++it) {         int v = *it;         assert(!(v % p));         for (int j = 0; j < (l); ++j)           if (!(v % P[j])) ++has[j];         if (((int)ans.size()) < K) {           ans.push_back(v);         } else {           bool found = false;           for (int j = (K - 1); j >= (0); --j) {             int w = ans[j];             bool good = true;             for (int h = (0); h <= (l); ++h) {               int& pr = P[h];               if (!(w % pr)) {                 if (has[h] <= least) {                   good = false;                   break;                 }               }             }             if (good) {               for (int h = (0); h <= (l - 1); ++h) {                 int& pr = P[h];                 if (!(w % pr)) {                   has[h]--;                 }               }               assert(ans[j] % p);               ans[j] = v;               found = true;               break;             }           }           assert(found);           assert(ans.size() == K);         }         ++i;       }       assert(((int)ans.size()) <= K);     }     assert(((int)ans.size()) == K);     sort(ans.begin(), ans.end());     ans.erase(unique(ans.begin(), ans.end()), ans.end());     assert(((int)ans.size()) == K);     for (int l = 0; l < (L); ++l) {       int cnt = 0;       for (int i = 0; i < ((int)ans.size()); ++i)         if (!(ans[i] % P[l])) {           ++cnt;         }       assert(cnt == 0 || cnt >= least);     }     for (int i = 0; i < (((int)ans.size())); ++i) assert(ans[i] <= lim);     for (int i = 0; i < (K); ++i) {       if (i > 0) printf(   );       printf( %d , ans[i]);     }     printf(  n );   }   