Cod sursa(job #494617)

Utilizator joli94Apostol Adrian Alexandru joli94 Data 22 octombrie 2010 12:21:18
Problema Indep Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include<cstdio>

int MAX = -1 , n , d, a[1000][1000] , v[1001];

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

void read()
{
	freopen ( "indep.in" , "r" , stdin );
	freopen ( "indep.out" , "w" , stdout );
	scanf("%d" , &n);
	for (int i=1 ; i<=n ; ++i )
	{
		scanf ( "%d" , &v[i] );
		if (v[i]>MAX) MAX = v[i];
	}
}

void solve()
{
	a[1][v[1]] = 1;
	for (int i=2 ; i<=n ; ++i )
	{
		for (int j=1 ; j<=MAX ; ++j )
		{
			if (a[i-1][j] != 0 )
			{
				d = cmmdc ( j, v[i] );
				a[i][d] += a[i-1][j];
			}
			a[i][j]+=a[i-1][j];
		}
		++a[i][v[i]];
	}
	printf("%d\n" , a[n][1]);
}

int main()
{
	read();
	solve();
	return 0;
}