Cod sursa(job #266068)

Utilizator za_wolfpalianos cristian za_wolf Data 24 februarie 2009 21:22:43
Problema Indep Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<stdio.h>
#define NMAX 501
#define MMAX 1001
int y[NMAX][MMAX],x[NMAX],i,j,n,m,k,l,a,s;
int cmmdc(int a, int b)
{
	while(a&&b)
	{
		if (a>b)
			a%=b;
		else
			b%=a;

	}
	if (a)
		return a;
	else
		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",&x[i]);
		if (x[i]>s)
			s=x[i];
	}
/*	y[1][x[1]]=1;
	for (i=1;i<=n;i++)
		for (j=1;j<=s;j++)
			{
				y[i+1][j]+=y[i][j];
				if (y[i][j])
					y[i+1][cmmdc(j,x[i+1])]+=y[i][j];
			}                                         */
	y[1][x[1]]=1;
	for (i=2;i<=n;i++)
	{
		y[i][x[i]]+=1;
		for (j=1;j<i;j++)
			for (l=1;l<=s;l++)
			if (y[j][l])
			{
				y[i][cmmdc(x[i],l)]+=y[j][l];
			}
	}
	s=0;
	for (i=1;i<=n;i++)
		s+=y[i][1];
	printf("%d\n",s);




	return 0;
}