func_code_string: #include <bits/stdc++.h>   int ss[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53};   int n, a[200], f[120][(1 << 16) + 10], b[100], g[120][(1 << 16) + 10];   void outit(int x, int y) {     if (y == 0) return;     outit(x & ~b[g[y][x]], y - 1);     printf( %d , g[y][x]);     if (y == n)       printf(  n );     else       printf(   );   }   int main() {     int x, i, j, k, ans;     scanf( %d , &n);     for (i = 1; i <= n; i++) scanf( %d , &a[i]);     memset(b, 0, sizeof(b));     for (i = 1; i <= 58; i++)       for (j = 0; j < 16; j++)         if (i % ss[j] == 0) b[i] |= 1 << j;     for (i = 1; i <= n; i++)       for (j = 0; j < 1 << 16; j++) f[i][j] = 1000000000;     for (i = 1; i <= n; i++) {       for (j = 0; j < 1 << 16; j++) {         for (k = 1; k <= 58; k++)           if ((j & b[k]) == 0)             if (f[i][j | b[k]] > f[i - 1][j] + fabs(a[i] - k)) {               f[i][j | b[k]] = f[i - 1][j] + fabs(a[i] - k);               g[i][j | b[k]] = k;             }       }     }     ans = 1000000000;     for (i = 0; i < 1 << 16; i++)       if (f[n][i] < ans) {         ans = f[n][i];         x = i;       }     outit(x, n);     printf(  n );   }   