Pagini recente » Cod sursa (job #1747763) | Cod sursa (job #2817649) | Cod sursa (job #1256424) | Cod sursa (job #2219727) | Cod sursa (job #126265)
Cod sursa(job #126265)
#include <stdio.h>
int n,a[600],b[3][1100][400],m,c[400],cm,x;
int cmmdc( int a, int b)
{
int r;
if (a==0)
return b;
if (b==0)
return a;
r=a%b;
while (r!=0)
{
a=b;
b=r;
r=a%b;
}
return b;
}
void add( int a[1000],int b[1000])
{
int i,t=0;
//for (i=1; i<=c[0]; ++i) c[i]=0;
i=0;
//c[0]=0;
while (t>0 || i<a[0] || i<b[0])
{
++i;
a[i]=(t+b[i]+a[i])%10;
t=a[i]/10;
if (i>a[0]) a[0]=i;
}
}
int main()
{
freopen("indep.in","r",stdin);
freopen("indep.out","w",stdout);
int i,j;
scanf("%d",&n);
for (i=1; i<=n; ++i)
{
scanf("%d",&a[i]);
if (m<a[i]) m=a[i];
}
b[0][a[1]][0]=1;
b[0][a[1]][1]=1;
for (i=2; i<=n; i++)
{
b[1][a[i]][0]=1;
b[1][a[i]][1]=1;
for (j=0; j<=m; j++)
{
cm=cmmdc(j,a[i]);
add(b[1][j],b[0][j]);
//b[i][j]+=b[i-1][j];
add(b[1][cm],b[0][j]);
//b[i][cm]+=b[i-1][j];
}
for (j=1; j<=m; ++j)
{
b[0][j][0]=b[1][j][0];
for (int k=1; k<=b[1][j][0]; ++k)
{
b[0][j][k]=b[1][j][k];
}
}
}
for (i=b[1][1][0]; i>0; --i) printf("%d",b[1][1][i]);
//printf("%d",b[n][1]);
return 0;
}