Pagini recente » Cod sursa (job #3281351) | test1241 | Cod sursa (job #1682346) | Cod sursa (job #1760282) | Cod sursa (job #494628)
Cod sursa(job #494628)
#include<cstdio>
int a[510][1010][500],v[510];
int n,unu[10];
int cmmdc(int a, int b)
{
int r;
while(b)
{
r=a%b;
a=b;
b=r;
}
return a;
}
void Add(int A[500], int B[500])
{
int i,T=0;
if (B[0]>A[0])
{ for (i=A[0]+1;i<=B[0];) A[i++]=0;
A[0]=B[0];
}
else for (i=B[0]+1;i<=A[0];) B[i++]=0;
for (i=1;i<=A[0];i++)
{ A[i]+=B[i]+T;
T=A[i]/10;
A[i]%=10;
}
if (T) A[++A[0]]=T;
}
void afisare(int A[500])
{
for(int i=A[0];i>=1;i--)
printf("%d",A[i]);
}
int main()
{
int i,j,d;
freopen("indep.in","r",stdin);
freopen("indep.out","w",stdout);
scanf("%lld",&n);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
a[1][v[1]][0]=a[1][v[1]][1]=1;
unu[0]=unu[1]=1;
for(i=2;i<=n;i++)
{
for(j=1;j<=1000;j++)
{
if(a[i-1][j][0]!=0)
{
d=cmmdc(j,v[i]);
Add(a[i][d],a[i-1][j]);
}
Add(a[i][j],a[i-1][j]);
}
Add(a[i][v[i]],unu);
}
afisare(a[n][1]);
return 0;
}