Pagini recente » Cod sursa (job #2097695) | Cod sursa (job #845770) | Cod sursa (job #2491341) | Cod sursa (job #1132155) | Cod sursa (job #360981)
Cod sursa(job #360981)
#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);
}