Cod sursa(job #2095620)

Utilizator BlankTheBlanketAndrei Roceanu BlankTheBlanket Data 27 decembrie 2017 19:58:39
Problema Indep Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <cstdio>
#define N 1010
#define L 30

int n;
int a[N][L];
const int baza = 100000000;
int unu[L];

inline int cmmdc(int a,int b) {
    int r;

    while(b!=0) {
        r = a%b;
        a = b;
        b = r;
    }

    return a;
}

inline void adun(int a[L],int b[L]) {
    int i = 1, t = 0;

    for(; i<=a[0] || i<=b[0] || t!=0; ++i,t/=baza) {
            t += a[i] + b[i];
        a[i] = t%baza;
    }

    a[0] = i-1;
}

inline void scrie(int a[L]) {
    printf("%d",a[a[0]]);
    for(int i=a[0]-1; i>0; --i)
        printf("%.8d",a[i]);
    printf("\n");
}

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

        scanf("%d",&n);
    int x;
    unu[0] = unu[1] = 1;

    for(int i=1; i<1001; ++i)
        a[i][0] = 1;

    for(int i=0; i<n; ++i) {
        scanf("%d",&x);

        for(int j=1; j<1001; ++j)
            adun(a[cmmdc(x,j)],a[j]);
        adun(a[x],unu);
    }

    scrie(a[1]);
    return 0;
}