func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 101;   int prime[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53};   const int sz = sizeof(prime) / sizeof(int), V = 58;   int pos[V + 1], dp[N][1 << sz], n, A[N], minPrime[V + 1], trace[N][1 << sz];   void prepare() {     for (int i = 2; i * i <= V; ++i)       if (!minPrime[i])         for (int j = i * i; j <= V; j += i)           if (!minPrime[j]) minPrime[j] = i;     for (int i = 2; i <= V; ++i)       if (!minPrime[i]) minPrime[i] = i;     for (int i = 0; i < sz; ++i) pos[prime[i]] = i;   }   int solve(int idx, int msk) {     if (idx > n) return 0;     int &res = dp[idx][msk];     if (res != INT_MAX) return res;     int s, val, d;     for (int x = 1; x <= 58; ++x) {       val = x;       d = -1;       s = 0;       while (val > 1) {         if (minPrime[val] != d) {           d = minPrime[val];           s |= (1 << pos[d]);         }         val /= d;       }       if (!(s & msk)) {         val = abs(x - A[idx]) + solve(idx + 1, msk | s);         if (val < res) {           res = val;           trace[idx][msk] = x;         }       }     }     return res;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     cin >> n;     for (int i = 1; i <= n; ++i) cin >> A[i];     fill(&dp[0][0], &dp[0][0] + sizeof(dp) / sizeof(int), INT_MAX);     prepare();     solve(1, 0);     int msk = 0, val, d, s;     for (int i = 1; i <= n; ++i) {       val = trace[i][msk];       cout << val <<    ;       d = -1;       s = 0;       while (val > 1) {         if (minPrime[val] != d) {           d = minPrime[val];           s |= (1 << pos[d]);         }         val /= d;       }       msk |= s;     }     return 0;   }   