Cod sursa(job #343927)

Utilizator mgntMarius B mgnt Data 27 august 2009 20:14:59
Problema Indep Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include<cstdio>
using namespace std;

int const N=500;
int const M=1000;
int V[N];
long long C[1+N][1+M];
  // C[s][i] - numarul de siruri pentru care cmmdc este i
  // folosind doar primele s elemente din sir

int
cmmdc (int a, int b) {
  int c;
  while ( a ) {
    c = b % a ;
    b = a ;
    a = c ;
  }
  return b;
}

int
main ( ) {
  FILE * fl=fopen("indep.in", "r"); int n, s, k, i, d;
  fscanf(fl,"%d", &n);
  for ( s=0; n>s; ++s ) { fscanf(fl,"%d",&V[s]); }
  fclose(fl);
  for ( s=1; M>=s; ++s ) { C[0][s]=0; }
  for ( s=1; n>=s; ++s ) { k=V[s-1]; 
    for ( i=1; M>=i; ++i ) { C[s][i]=C[s-1][i]; } ++C[s][k];
    for ( i=1; M>=i; ++i ) { d=cmmdc(k,i); C[s][d]+=C[s-1][i]; }
  }
  fl=fopen("indep.out", "w"); fprintf(fl,"%lld\n",C[n][1]);
  fclose(fl); return 0;
}