Pagini recente » Cod sursa (job #2400651) | Cod sursa (job #2152659) | Cod sursa (job #990974) | Cod sursa (job #479058) | Cod sursa (job #556358)
Cod sursa(job #556358)
#include<cstdio>
#include<cstring>
int i,j,n,a[1024][1024],aux[1024][1024],cmdc[1024][1024],v[1024],k=0,unu[1024];
int cmmdc(int a,int b)
{
if(!b) return a;
return cmmdc(b,a%b);
}
void add(int a[],int b[])
{
int lim=0,rest=0;
if(a[0]>b[0]) lim=a[0];
else lim=b[0];
for(int i=1;i<=lim;++i)
{
a[i]=a[i]+b[i]+rest;
rest=a[i]/10;
a[i]%=10;
}
while(rest)
{
a[++lim]=rest%10;
rest/=10;
}
a[0]=lim;
}
int main()
{
freopen("indep.in","r",stdin);
freopen("indep.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;++i)
{
scanf("%d",&v[i]);
if(v[i]>k) k=v[i];
}
for(i=1;i<=k;++i)
for(j=i+1;j<=k;++j)
cmdc[i][j]=cmdc[j][i]=cmmdc(i,j);
for(i=1;i<=n;++i)
{
int x=v[i];
unu[0]=1;
unu[1]=1;
add(aux[x],unu);
for(j=1;j<=k;++j)
if(a[j][0])
{
int cm=cmdc[j][x];
add(aux[cm],a[j]);
}
for(j=1;j<=k;++j)
if(aux[j][0])
{
add(a[j],aux[j]);
memset(aux[j],0,sizeof(aux[j]));
}
}
if(!a[1][0]) printf("0");
else
for(i=a[1][0];i>0;--i) printf("%d",a[1][i]);
printf("\n");
fclose(stdin);
fclose(stdout);
return 0;
}