Cod sursa(job #1793843)

Utilizator TincaMateiTinca Matei TincaMatei Data 31 octombrie 2016 16:45:56
Problema Indep Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <cstdio>

const int MAX_N = 500;
const int MAX_NR = 1000;

long long d[1+MAX_NR];
int gcd[1+MAX_NR][1+MAX_NR];

int getGcd(int a, int b) {
  if(gcd[a][b] == 0) {
    if(a % b == 0)
      gcd[a][b] = gcd[b][a] = b;
    else
      gcd[a][b] = gcd[b][a] = getGcd(b, a % b);
  }
  return gcd[a][b];
}

int main() {
  int n, x;

  for(int i = 1; i <= MAX_NR; ++i)
    for(int j = 1; j <= MAX_NR; ++j)
      getGcd(i, j);

  FILE *fin = fopen("indep.in", "r");
  fscanf(fin, "%d", &n);
  for(int i = 0; i < n; ++i) {
    fscanf(fin, "%d", &x);
    for(int g = 1; g <= MAX_NR; ++g) {
      for(int j = g; j <= MAX_NR; j = j + g)
        if(gcd[j][x] == g)
          d[g] += d[j];
    }
    d[x]++;
  }
  fclose(fin);
  FILE *fout = fopen("indep.out", "w");
  fprintf(fout, "%lld", d[1]);
  fclose(fout);
  return 0;
}