Cod sursa(job #360981)

Utilizator undogSavu Victor Gabriel undog Data 3 noiembrie 2009 09:25:30
Problema Indep Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <cstdio>

int ggt(int a,int b){
	int aux;
	while(b){
		 aux=a%b;
		 a=b;
		 b=aux;
	}
	return a;
}

struct data{
	int d,c;
};

int main(){
	freopen("indep.in","rt",stdin);
	freopen("indep.out","wt",stdout);
	
	int n,v[500];
	scanf("%d",&n);
	
	int i,j,k,l;
	for(i=0;i<n;i++)
		scanf("%d",&v[i]);
	
	data p[500][500];
	int c[500];
	int aux,ct;
	
	for(i=0;i<n;i++){
		c[i]=1;
		for(j=1;j<n;j++)
			p[i][j].d=p[i][j].c=0;
		p[i][0].d=v[i];
		p[i][0].c=1;
	}
	
	for(i=1;i<n;i++){
		for(j=0;j<i;j++)
			for(k=0;k<c[j];k++){
				aux=ggt(v[i],p[j][k].d);
				for(l=0;l<c[i];l++)
					if(aux==p[i][l].d){
						p[i][l].c+=p[j][k].c;
						break;
					}
				if(l==c[i]){
					c[i]++;
					p[i][l].d=aux;
					p[i][l].c=p[j][k].c;
				}
			}
	}
	ct=0;
	for(i=0;i<n;i++)
		for(j=0;j<c[i];j++)
			if(p[i][j].d==1)
				ct+=p[i][j].c;
	printf("%d",ct);
}