Pagini recente » Cod sursa (job #1950959) | Cod sursa (job #1217933) | Cod sursa (job #1271381) | Cod sursa (job #978802) | Cod sursa (job #61747)
Cod sursa(job #61747)
#include<stdio.h>
#define Nm 500
#define Km 1001
#define Cm 200
#define BASE 1000000000
int M[Km][Cm],A[Nm],One[Cm]={1,1},n;
void read()
{
int i;
freopen("indep.in","r",stdin);
scanf("%d",&n);
for(i=0;i<n;++i)
scanf("%d",A+i);
}
void add(int A[], int B[])
{
int i,t=0;
for(i=1;i<=A[0] || i<=B[0] || t;++i,t/=BASE)
A[i]=(t+=A[i]+B[i])%BASE;
A[0]=i-1;
}
int cmmdc(int a, int b)
{
int r;
while(b)
{
r=a%b;
a=b;
b=r;
}
return a;
}
void solve()
{
int i,j,k;
k=A[0];
M[k][0]=M[k][1]=1;
for(i=1;i<n;++i)
{
for(j=1;j<=k;++j)
add(M[cmmdc(j,A[i])],M[j]);
add(M[A[i]],One);
if(A[i]>k)
k=A[i];
}
}
int digits(int x)
{
int i=0;
if(!x)
return 1;
while(x)
{
++i;
x/=10;
}
return i;
}
void write()
{
int i,j,k;
freopen("indep.out","w",stdout);
if(M[1][0])
{
printf("%d",M[1][M[1][0]]);
for(i=M[1][0]-1;i;--i)
{
k=digits(M[1][i]);
for(j=0;j<9-k;++j)
printf("0");
printf("%d",M[1][i]);
}
printf("\n");
}
else
printf("0\n");
}
int main()
{
read();
solve();
write();
return 0;
}