Pagini recente » Cod sursa (job #1297781) | Cod sursa (job #1442078) | Cod sursa (job #2019651) | Cod sursa (job #1770053) | Cod sursa (job #61619)
Cod sursa(job #61619)
#include <stdio.h>
#define fin "indep.in"
#define fout "indep.out"
#define Nmax 501
#define Dmax 1001
#define Cmax 1001
int N,ret,v[Nmax],cnt2[Dmax][Cmax],cnt1[Dmax][Cmax];
int gcd(int a,int b) {
if (b==0)
return a;
else
return gcd(b,a%b);
}
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,tmp,lim;
int aux[Cmax];
freopen(fin,"r",stdin); freopen(fout,"w",stdout);
scanf("%d",&N);
lim=0;
for (i=1;i<=N;++i) {
scanf("%d",&v[i]);
if (v[i]>lim)
lim=v[i];
}
aux[0]=aux[1]=1;
for (i=1;i<=N;++i) {
for (j=1;j<=lim;++j) {
tmp=gcd(j,v[i]);
add(cnt2[tmp],cnt1[j]); //cnt[i][tmp]+=cnt[i-1][j];
}
for (j=1;j<=lim;++j) {
tmp=gcd(j,v[i]);
add(cnt2[j],cnt1[j]);
}
add(cnt2[v[i]],aux); //cnt[i][v[i]]++;
for (j=1;j<=lim;++j) {
cnt1[j][0]=1; cnt1[j][1]=0;
add(cnt1[j],cnt2[j]);
cnt2[j][0]=0;
}
}
// for (j=1;j<10;++j) {
// for (i=1;i<=N;++i)
/// fprintf(stderr,"%d ",cnt[i][j]);
// fprintf(stderr,"\n");}
print(cnt1[1]);
fclose(stdin); fclose(stdout);
return 0;
}