func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, arr[110], ans[110];   int primes[17] = {2,  3,  5,  7,  11, 13, 17, 19, 23,                     29, 31, 37, 41, 43, 47, 53, 59};   int fact[65];   int memo[110][1 << 17];   int find_min_cost(int ind, int mask) {     if (ind >= n) return 0;     if (memo[ind][mask] != -1) {       return memo[ind][mask];     }     memo[ind][mask] = 1 << 30;     for (int i = 1; i < 2 * arr[ind]; i++) {       if ((mask & fact[i]) == 0) {         memo[ind][mask] =             min(memo[ind][mask],                 abs(i - arr[ind]) + find_min_cost(ind + 1, (mask | fact[i])));       }     }     return memo[ind][mask];   }   void compute_ans(int ind, int mask, int min_cost) {     if (ind >= n) return;     for (int i = 1; i < 2 * arr[ind]; i++) {       if (((mask & fact[i]) == 0) and           (min_cost == abs(i - arr[ind]) + memo[ind + 1][(mask | fact[i])])) {         ans[ind] = i;         compute_ans(ind + 1, (mask | fact[i]), memo[ind + 1][(mask | fact[i])]);         return;       }     }   }   int main() {     cin >> n;     for (int i = 0; i < n; i++) cin >> arr[i];     memset(fact, 0, sizeof(fact));     for (int i = 2; i <= 62; i++) {       for (int j = 0; j < 17; j++) {         if ((i % primes[j]) == 0) fact[i] = (fact[i] | (1 << j));       }     }     for (int i = 0; i < n; i++)       for (int j = 0; j < (1 << 17); j++) memo[i][j] = -1;     for (int i = 0; i < (1 << 17); i++) memo[n][i] = 0;     int min_cost = find_min_cost(0, 0);     compute_ans(0, 0, min_cost);     for (int i = 0; i < n; i++) cout << ans[i] <<    ;     cout << endl;     return 0;   }   