Cod sursa(job #2310585)

Utilizator akaprosAna Kapros akapros Data 1 ianuarie 2019 17:04:17
Problema Indep Scor 25
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <bits/stdc++.h>
#define maxV 1001
#define ll long long

FILE *fin = freopen("indep.in", "r", stdin);
FILE *fout = freopen("indep.out", "w", stdout);

int gcd(int x, int y)
{
    int r = x % y;
    while (r)
    {
        x = y;
        y = r;
        r = x % y;
    }
    return y;
}
int main()
{
    int n, *v;
    scanf("%d", &n);
    v = new int[n + 1];
    for (int i = 0; i < n; ++ i)
        scanf("%d", &v[i]);

    ll dp[2][maxV];
    memset(dp, 0, sizeof(dp));
    dp[0][v[0]] = 1;
    for (int i = 1, t = 1; i < n; ++ i, t = !t)
    {
        memset(dp[t], 0, sizeof(dp[t]));
        for (int d1 = 1; d1 < maxV; ++ d1)
        {
            int d2 = gcd(d1, v[i]);
            dp[t][d2] += dp[!t][d1]; /// d2 <= d1
            dp[t][d1] += dp[!t][d1];
        }
        ++ dp[t][v[i]];
    }
    printf("%lld\n", dp[!(n & 1)][1]);
    return 0;
}