Pagini recente » Cod sursa (job #2458950) | Cod sursa (job #2415244) | Cod sursa (job #2620640) | Cod sursa (job #2804590) | Cod sursa (job #61744)
Cod sursa(job #61744)
#include<stdio.h>
#define Nm 500
#define Km 1001
#define Cm 200
#define BASE 10
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];
}
}
void write()
{
int i;
freopen("indep.out","w",stdout);
for(i=M[1][0];i;--i)
printf("%d",M[1][i]);
if(!M[1][0])
printf("0");
printf("\n");
}
int main()
{
read();
solve();
write();
return 0;
}