Cod sursa(job #1235419)

Utilizator hrazvanHarsan Razvan hrazvan Data 29 septembrie 2014 19:20:28
Problema Indep Scor 10
Compilator c Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <stdio.h>
#define MOD 10
#define MAXEL 1000
#define MAXL 180
int d[MAXEL + 1][MAXL], len[MAXEL + 1];

int cmmdc(int a, int b){
  int r;
  while(b > 0){
    r = a % b;
    a = b;
    b = r;
  }
  return a;
}

void add(int *v1, int l1, int *v2, int *l2){
  int i, max = l1;
  if(max < *l2)  max = *l2;
  for(i = 0; i < max; i++)   v2[i] += v1[i];
  i = 0;
  while(i < max || v2[i] != 0){
    v2[i + 1] += v2[i] / MOD;
    v2[i] %= MOD;
    if(i > *l2)  *l2 = i;
    i++;
  }
  if(v2[*l2] != 0)  (*l2)++;
}

int main(){
  FILE *in = fopen("indep.in", "r");
  int n, i, j, a, x, unu[1] = {1};
  fscanf(in, "%d", &n);
  for(i = 0; i < n; i++){
    fscanf(in, "%d", &x);
    for(j = 1; j <= MAXEL; j++){
      a = cmmdc(j, x);
      add(d[j], len[j], d[a], &len[a]);
    }
    add(unu, 1, d[x], &len[x]);
  }
  FILE *out = fopen("indep.out", "w");
  for(i = len[1] - 1; i >= 0; i--){
    fputc(d[1][i] + '0', out);
  }
  if(len[1] == 0)  fputc('0', out);
  fclose(out);
  return 0;
}