Pagini recente » Cod sursa (job #110941) | Cod sursa (job #1121527) | Cod sursa (job #3199148) | Cod sursa (job #1834765) | Cod sursa (job #61613)
Cod sursa(job #61613)
#include <stdio.h>
#define fin "indep.in"
#define fout "indep.out"
#define Nmax 501
#define Dmax 1001
#define Cmax 51
int N,ret[Cmax],v1[Dmax][Cmax],v2[Dmax][Cmax];
inline int gcd(int a,int b) {
if (b==0)
return a;
else
return gcd(b,a%b);
}
inline void add(int A[],int B[]) {
int i,t=0;
for (i=1;i<=A[0] || i<=B[0] || t;++i) {
if (i>A[0])
A[i]=0;
if (i>B[0])
B[i]=0;
A[i]+=B[i]+t;
if (A[i]>9) {
t=1;
A[i]%=10;
}
else
t=0;
}
A[0]=i-1;
}
void print(int A[]) {
int i;
for (i=A[0];i>0;--i)
printf("%d",A[i]);
printf("\n");
}
int main() {
int i,j,k,x,tmp;
int aux[Cmax];
freopen(fin,"r",stdin); freopen(fout,"w",stdout);
scanf("%d",&N);
aux[0]=aux[1]=1;
ret[0]=1;
for (i=1;i<=N;++i) {
scanf("%d",&x);
for (j=1;j<Dmax;++j) {
v2[j][0]=0;
add(v2[j],v1[j]);
}
for (j=1;j<Dmax;++j) {
tmp=gcd(j,x);
if (tmp!=x)
add(v2[tmp],v1[j]);
}
add(v2[x],aux);
add(ret,v2[1]);
for (j=1;j<Dmax;++j) {
v1[j][0]=0;
add(v1[j],v2[j]);
}
}
print(v1[1]);
fclose(stdin); fclose(stdout);
return 0;
}