Cod sursa(job #1340967)

Utilizator usermeBogdan Cretu userme Data 12 februarie 2015 11:13:50
Problema Indep Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <cstdio>
#include <cstring>

FILE*f=fopen("indep.in","r");
FILE*h=fopen("indep.out","w");

int rez[2][1001][201];

int n;

int divi(int a,int b){
    int r=a%b;
    while ( r ){
        a=b;
        b=r;
        r=a%b;
    }
    return b;
}

void add(int A[], int B[]){
    int i,t=0;
    for ( i=1;i<=A[0]||i<=B[0]||t;++i,t/=1000000000)
        A[i]=(t+=A[i]+B[i])%1000000000;
    A[0]=i-1;
}

int main(){
    fscanf(f,"%d",&n);
    int calc=1;
    for ( int i=0;i<n;++i,calc=1-calc ){
        int x;
        fscanf(f,"%d",&x);
        int v[10];
        v[0]=1;
        v[1]=1;
        add(rez[calc][x],v);
        if ( i ){
            for ( int j=1;j<=1000;++j ){
                add(rez[calc][j],rez[1-calc][j]);
                add(rez[calc][divi(j,x)],rez[1-calc][j]);
            }
        }
        else{
            rez[calc][x][0]=1;
            rez[calc][x][1]=1;
        }
        memset(rez[1-calc],0,sizeof(rez[1-calc]));
    }
    fprintf(h,"%d",rez[1-calc][1][rez[1-calc][1][0]]);
    for ( int i=rez[1-calc][1][0]-1;i>0;--i )
        fprintf(h,"%.9d",rez[1-calc][1][i]);
    return 0;
}