Cod sursa(job #1695493)

Utilizator Alexa2001Alexa Tudose Alexa2001 Data 27 aprilie 2016 12:29:32
Problema Indep Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <cstdio>

using namespace std;

const int baza=1e6;

int n, mic[50], x,j, y, i , ans[1005][50], k;

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

void add(int a[], int b[])
{
    int t=0, i;
    for(i=1; i<=a[0] || i<=b[0] || t; ++i)
    {
         t+=a[i]+b[i];
         a[i]=t%baza;
         t/=baza;
    }
    a[0]=i-1;
}

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

    scanf("%d", &n);

    mic[0]=mic[1]=1;
    for(i=1; i<=1000; ++i) ans[i][0]=1;

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

        for(j=1; j<=1000; ++j)
            add( ans[cmmdc(x,j)] , ans[j] );

        add(ans[x], mic);
    }

    printf("%d", ans[1][ans[1][0]] );

    for(i=ans[1][0]-1; i; --i)
        printf("%.6d", ans[1][i]);

    printf("\n");

    return 0;
}