Cod sursa(job #1681336)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 9 aprilie 2016 13:21:40
Problema Indep Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <cstdio>
#define MAXN 500
#define MAXNR 1000
int d[2][MAXNR+1][500];
int mat[MAXNR+1][MAXNR+1];
inline int cmmdc(int a,int b){
     int r;
     while(b>0){
        r=a%b;
        a=b;
        b=r;
     }
     return a;
}
int main(){
    FILE*fi,*fout;
    int i,n,nr,j,x,t;
    fi=fopen("indep.in" ,"r");
    fout=fopen("indep.out" ,"w");
    fscanf(fi,"%d" ,&n);
    for(i=1;i<=MAXNR;i++)
      for(j=1;j<=MAXNR;j++)
         mat[i][j]=cmmdc(i,j);
    for(i=1;i<=n;i++){
       fscanf(fi,"%d" ,&nr);
       for(x=1;x<=MAXNR;x++)
         for(j=0;j<200;j++)
            d[i&1][x][j]=0;
       d[i&1][nr][0]=1;
       for(x=1;x<=MAXNR;x++){
           t=0;
           for(j=0;t>0||j==0;j++){
               t=t+d[i&1][mat[nr][x]][j]+d[1-i&1][x][j];
               d[i&1][mat[nr][x]][j]=t%10;
               t/=10;
           }
       }
       for(x=1;x<=MAXNR;x++){
           t=0;
           for(j=0;t>0||j==0;j++){
               t=t+d[i&1][x][j]+d[1-i&1][x][j];
               d[i&1][x][j]=t%10;
               t/=10;
           }
       }
    }
    i=499;
    while(d[n&1][1][i]==0)
       i--;
    for(;i>=0;i--)
        fprintf(fout,"%d" ,d[n&1][1][i]);
    fclose(fi);
    fclose(fout);
    return 0;
}