Pagini recente » Cod sursa (job #1051570) | Cod sursa (job #3156856) | Cod sursa (job #1571519) | Cod sursa (job #951919) | Cod sursa (job #266087)
Cod sursa(job #266087)
#include<stdio.h>
#define NMAX 501
#define MMAX 1001
int y[NMAX][MMAX][20],x[NMAX],i,j,n,m,k,l,a,s,rez[NMAX];
int unu[]={1,1};
void add(int A[], int B[])
{
int i, t = 0;
for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)
A[i] = (t += A[i] + B[i]) % 10;
A[0] = i - 1;
}
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];
}
add(y[1][x[1]],unu);
for (i=2;i<=n;i++)
{
// y[i][x[i]]+=1;
add(y[i][x[i]],unu);
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];
add(y[i][cmmdc(x[i],l)],y[j][l]);
}
}
for (i=1;i<=n;i++)
add(rez,y[i][1]);
// s+=y[i][1];
// printf("%d\n",s);
for (i=rez[0];i>=1;i--)
printf("%d",rez[i]);
printf("\n");
return 0;
}