Cod sursa(job #165311)

Utilizator alecmanAchim Ioan Alexandru alecman Data 25 martie 2008 20:24:05
Problema Indep Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include<stdio.h>

#define INPUT "indep.in"
#define OUTPUT "indep.out"
#define NMAX 501

FILE *fin = fopen(INPUT, "r"), *fout=fopen(OUTPUT, "w");

int N;
int a[ NMAX ];

long long sum[ NMAX ][ NMAX ];

void readValues();

void solveFunction();

inline int euclid(int, int);

int main()
{
  readValues();

  solveFunction();

  fclose(fin);
  fclose(fout);

  return 0;
}

void readValues()
{
  fscanf(fin, "%d", &N);

  for(int i = 0; i < N; ++i)
    fscanf(fin, "%d", &a[ i ]);
}

void solveFunction()
{
  long long sumFinal, sumNivel;
  long contCur;

  sumFinal = 0;
  sumNivel = 0;

  for(int i = 1; i < N; ++i)
  {
    contCur = 0;

    for(int j = 0; j < i; ++j)
    {
      if(euclid(a[ i ], a[ j ]) == 1)
	++contCur;
    }

    sum[ 1 ][ i ] = contCur;

    sumFinal += contCur;
  }

  for(int i = 2; i < N; ++i)
  {
    sumNivel = 0;

    for(int j = i; j < N; ++j)
    {
      contCur = 0;

      for(int k = 0; k < j; ++k)
	contCur += sum[ i - 1][ k ];

      sum[ i ][ j ] = contCur;

      sumNivel += contCur;
    }

    sumFinal += sumNivel;
  }

  fprintf(fout, "%lld\n", sumFinal);
}

inline int euclid(int A, int B)
{
  if(!B) return A;
  else return euclid(B, A%B);
}