Cod sursa(job #124782)

Utilizator savimSerban Andrei Stan savim Data 19 ianuarie 2008 20:49:05
Problema Indep Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <stdio.h>
int i,j,k,n;
int a[501];
int din[501][1001][41];
void add(int p, int q,int r, int t)
{
	 int i,tr=0;
	 for (i=40; i>=1; i--)
	 {
		 din[p][q][i]+=din[r][t][i]+tr;
		 tr=din[p][q][i]/100000000;
		 din[p][q][i]%=100000000;
	 }
}
int cmmdc(int x, int y)
{
	int a=x,b=y,r;

	while (a%b!=0)
	{
		  r=a%b;
		  a=b;
		  b=r;
	}
	return b;
}
int main()
{

	freopen("indep.in","r",stdin);
	freopen("indep.out","w",stdout);

	scanf("%d",&n);
	for (i=1; i<=n; i++)
	{
		scanf("%d",&a[i]);
		din[i][a[i]][40]=1;
	}

	for (i=0; i<=n-1; i++)
	{
		for (j=0; j<=1000; j++)
		{
			add(i+1,j,i,j);
			add(i+1,cmmdc(j,a[i+1]),i,j);
		}
	}
	j=0;
	for (i=1; i<=40; i++)
		if (din[n][1][i]!=0)
		{
		   for (j=i; j<=40; j++)
			   printf("%d",din[n][1][j]);
		   printf("\n");
		   return 0;
		}
    printf("0\n");
    return 0;
}