Cod sursa(job #347506)

Utilizator silvia_the_bestSilvia Pripoae silvia_the_best Data 12 septembrie 2009 16:46:06
Problema Indep Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <cstdio>
#include <algorithm>

using namespace std;

#define FIN "indep.in"
#define FOUT "indep.out"

#define N 505
#define M 1005

int n , a[N], d[N][M];//[M];

int gcd(int i, int j)
{
    if (!i || !j)
        return i ? i : j;

    return gcd(max(i, j) % min(i, j), min(i, j));
}

int main()
{
    int i, j;

    freopen(FIN, "r", stdin);
    freopen(FOUT, "w", stdout);

    scanf("%d", &n);

    for (i = 1; i <= n; ++ i)
        scanf("%d", &a[i]);

    for (i = 1; i <= n; ++ i)
        d[i][a[i]] = 1;

    for (i = 1; i < n; ++ i)
        for (j = 1; j <= 1000; ++ j)
        {
            d[i + 1][gcd(j, a[i + 1])] += d[i][j];

            d[i + 1][j] += d[i][j];
        }

    printf("%d\n", d[n][1]);
}