Cod sursa(job #61652)

Utilizator info_arrandrei gigea info_arr Data 20 mai 2007 11:34:21
Problema Indep Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
using namespace std;

#define nmax 505
#define bas 10
#define dmax 100

#include<stdio.h>
#include<fstream>

FILE *fin=fopen("indep.in","r"),
     *fout=fopen("indep.out","w");

struct bignum
 {
   int n;
   int x[dmax];
 };  

int a[nmax],c[nmax*2],n,i,j;
long long opt[nmax][nmax];
int cm,m=10000000;

 int euclid(int a, int b)  
  { 
    int c;  
    while (b) {  
     c = a % b;  a = b;  b = c; } 
   return a;
   } 
   
int max(int a, int b)
 { if (a>b) return a; else return b; }   
   
void add(bignum &a, bignum b, bignum c)
{
   int t=0,i;
   a.n=max(b.n,c.n);  
   for (i=1; i<=a.n; i++)
    {
      t+=b.x[i]+c.x[i];
      a.n=t%bas;
      t=t/bas;
    }  
   if (t>0) { a.n++; a.x[a.n]=t; }
   return; 
}   
   

int main()
{
  fscanf(fin,"%d\n",&n);
  for (i=1; i<=n; i++)  
    { 
       fscanf(fin,"%d\n",&a[i]); 
       if (a[i]>m) m=a[i];
       c[a[i]]=1; 
    } 
  for (i=1; i<=n; i++)
  {
   for (j=1; j<=m;j++)
    {
      cm=euclid(j,a[i]);
      opt[i][cm]=opt[i-1][j]+opt[i-1][cm];
    }
   if (c[i]==1)
    for (j=1; j<=m; j++) opt[i][j]=opt[i][j]+1;
  }   
 // for (i=n; i>=1; i--)  
  fprintf(fout,"%lld\n",opt[n][1]);  
/* for (i=1; i<=n; i++)
   {
     for (j=1; j<=n; j++)
      fprintf(fout,"%lld ",opt[i][j]);
    fprintf(fout,"\n");
   } */ 
fclose(fin);
fclose(fout);

  return 0;
}