Cod sursa(job #390049)

Utilizator indestructiblecont de teste indestructible Data 2 februarie 2010 20:42:31
Problema Indep Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <stdio.h>
#define NMAX 501
#define LMAX 1000
int n,v[NMAX],best[LMAX][NMAX],unu[2];
void read()
{
	scanf("%d",&n);
	int i;
	for (i=1; i<=n; i++)
		scanf("%d",&v[i]);
	unu[0]=1; unu[1]=1;
}
int cmmdc(int a,int b)
{
	int r;
	while(b)
	{
		r=a%b;
		a=b;
		b=r;
	}
	return a;
}
void add(int A[], int B[])
{
      int i, t = 0;
	  if (!A[0] && !B[0])
		  return ;
      for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)
              A[i] = (t += A[i] + B[i]) % 10;
      A[0] = i - 1;
}
void solve()
{
	int i,j,t;
	for (i=1; i<=n; i++)
	{
		for (j=1; j<=1000; j++)
		{
			t=cmmdc(v[i],j);
			add(best[t],best[j]);
		}
		add(best[v[i]],unu);
	}
}
int main()
{
	freopen("indep.in","r",stdin);
	freopen("indep.out","w",stdout);
	read();
	solve();
	int i;
	for (i=best[1][0]; i>=1; i--)
		printf("%d",best[1][i]);
	return 0;
}