Cod sursa(job #1125704)

Utilizator alexalghisiAlghisi Alessandro Paolo alexalghisi Data 26 februarie 2014 19:06:33
Problema Indep Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>
#include <fstream>

#define DN 505
#define cfr 300
#define LL long long
using namespace std;

int dp[DN+DN][cfr],v[DN],unu[cfr];
int BASE = 1000 * 1000 * 1000;
/// dp[j] = nr de subsiruri divizibile cu j

inline int cmmdc(int a,int b){

    int c;
    for(;b;){
        c=a%b;
        a=b;
        b=c;
    }
    return a;
}

void sum(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%BASE;
        t/=BASE;
    }
    A[0] = i - 1;
}
void prnt(int x){

    printf("%.9d",x);
}

int main()
{
    int n;
    freopen("indep.in","r", stdin);
    freopen("indep.out","w", stdout);
    scanf("%d",&n);

    unu[0] = 1; unu[1] = 1;

    for(int i=1;i<=n;++i){

        int x;
        scanf("%d",&x);

        for(int j=1;j<=1000;++j)
            sum( dp[cmmdc(j,x)] , dp[j]);
        sum(dp[x],unu);
    }
    //g<<dp[1];

    printf("%d",dp[1][ dp[1][0] ]);
    for(int i=dp[1][0]-1;i>=1;--i)
        prnt(dp[1][i]);
    return 0;
}