Cod sursa(job #1695481)

Utilizator Alexa2001Alexa Tudose Alexa2001 Data 27 aprilie 2016 12:05:42
Problema Indep Scor 75
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <cstdio>

using namespace std;

const int baza=1e6;

int n, mic[5], x,j, y, i , ans[1005][505], cmmdc[1005][1005],k;

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<=1000; ++i)
    for(j=1; j<=1000; ++j)
    if(!cmmdc[i][j])
    {
        for(k=1; i*k<=1000 && j*k<=1000; ++k)
            cmmdc[i*k][j*k]=k;
    }

    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;
}