Pagini recente » Cod sursa (job #953801) | Cod sursa (job #2957355) | Cod sursa (job #2975373) | Cod sursa (job #1799902) | Cod sursa (job #126241)
Cod sursa(job #126241)
#include <stdio.h>
int n,a[600],b[600][1100][50],m,c[50],cm,x,e[50],f[50];
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[50],int b[50])
{
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[1][a[1]][0]=1;
b[1][a[1]][1]=1;
for (i=2; i<=n; i++)
{
b[i][a[i]][0]=1;
b[i][a[i]][1]=1;
for (j=0; j<=m; j++)
{
cm=cmmdc(j,a[i]);
add(b[i][j],b[i-1][j]);
//b[i][j]+=b[i-1][j];
add(b[i][cm],b[i-1][j]);
//b[i][cm]+=b[i-1][j];
}
}
for (i=b[n][1][0]; i>0; --i) printf("%d",b[n][1][i]);
//printf("%d",b[n][1]);
return 0;
}