Pagini recente » Cod sursa (job #2886370) | Cod sursa (job #51835) | Cod sursa (job #553109) | Cod sursa (job #3215484) | Cod sursa (job #588196)
Cod sursa(job #588196)
#include<stdio.h>
#include<fstream>
using namespace std;
long n,x[501];
short a[501][1001][250],u[300];
void add(short int a[],short int b[])
{
int i,t=0;
for (i=1;i<=a[0] || i<=b[0] || t;i++,t/=10)
a[i]=(t+=a[i]+b[i])%10;
a[0]=i-1;
}
int cmmdc(int a,int b) {
int r;
while (b!=0) {
r=a%b;
a=b;
b=r;
}
return a;
}
int main() {
int i,j;
freopen("indep.in","r",stdin);
freopen("indep.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;++i) {
scanf("%d",&x[i]);
}
u[0]=u[1]=1;
a[1][x[1]][0]=a[1][x[1]][1]=1;
for(i=2;i<=n;++i) {
memset(a[i&1],0,sizeof(a[i&1]));
for(j=1;j<1001;j++)
add(a[i&1][cmmdc(j,x[i])],a[(i-1)&1][j]);
add(a[i&1][x[i]],u);
for(j=1;j<1001;j++)
add(a[i&1][j],a[(i-1)&1][j]);
/*d=cmmdc(x[i],j);
a[i][d]+=a[i-1][j];
a[i][j]+=a[i-1][j];*/
}
//printf("%lld",a[n][1]);
if(a[n&1][1][0]==0) {
printf("0");
return 0;
}
for(i=a[n&1][1][0];i>0;--i)
printf("%d",a[n&1][1][i]);
return 0;
}