Cod sursa(job #1524213)

Utilizator SmarandaMaria Pandele Smaranda Data 13 noiembrie 2015 18:05:30
Problema Indep Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <cstdio>
#include <cstring>

using namespace std;

const int N = 501;

int dp [N][1002], a [N];

inline int cmmdc (int x, int y) {
    int r;

    while (y) {
        r = x % y;
        x = y;
        y = r;
    }
    return x;
}

int main () {
    int n, i, x, j;

    freopen ("indep.in", "r", stdin);
    freopen ("indep.out", "w", stdout);

    scanf ("%d", &n);
    for (i = 1; i <= n; i ++)
        scanf ("%d", &a [i]);
    dp [1][a [1]] = 1;
    for (i = 2; i <= n; i ++) {
        memcpy (dp [i], dp [i - 1], sizeof (dp [i - 1]));
        dp [i][a [i]] ++;
        for (j = 1; j <= 1000; j ++)
            if (dp [i - 1][j]) {
                x = cmmdc (j, a [i]);
                dp [i][x] += dp [i - 1][j];
            }
    }
    printf ("%d\n", dp [n][1]);
    return 0;
}