Cod sursa(job #2591779)

Utilizator ioana.jianuIoana Jianu ioana.jianu Data 31 martie 2020 11:52:32
Problema Indep Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <iostream>
#include <stdio.h>

using namespace std;

int d[1005][101];

void adunare (int p1, int p2) {
    int n1, n2, x, r, i;
    n1 = d[p1][0];
    n2 = d[p2][0];
    n1 = n2 = d[p1][0] = max(n1, n2);
    r = 0;
    for (i = 1; i <= n1; i++) {
        x = d[p1][i] + d[p2][i] + r;
        d[p1][i] = x % 10;
        r = x / 10;
    }
    if (r == 1){
        d[p1][n1 + 1] = 1;
        d[p1][0]++;
    }
}

int cmmdc (int a, int b) {
    int r;
    while (b > 0) {
        r = a % b;
        a = b;
        b = r;
    }
    return a;
}


int main() {

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

    int n, i, j, nr;

    d[0][0] = d[0][1] = 1;
    scanf ("%d", &n);
    for (i = 1; i <= n; i++) {
        scanf ("%d", &nr);
        for (j = 1; j <= 1000; j++)
            if (d[j][0] > 0)
                adunare(cmmdc(nr, j), j);
                //d[cmmdc(nr, j)] += d[j];
        adunare(nr, 0);
    }

    if (d[1][0] == 0)
        printf ("0");
    else {
        for (i = d[1][0]; i >= 1; i--)
            printf ("%d", d[1][i]);
    }

    return 0;
}