Pagini recente » Cod sursa (job #2106112) | Cod sursa (job #2242363) | Cod sursa (job #2457300) | Cod sursa (job #2697632) | Cod sursa (job #757140)
Cod sursa(job #757140)
#include <cstdio>
const int C=101;
const int M=1000000000;
int n,v[505],d[2][1005][C];
int cmmdc(int a,int b)
{
int r;
while(b != 0)
{
r = a%b;
a = b;
b = r;
}
return a;
}
void adunare(int a[C],int b[C])
{
int i,aux,t=0;
for(i=1 ; i<=a[0] || i<=b[0] || t!=0 ; i++)
{
aux = a[i] + b[i] + t;
a[i] = aux%M;
t = aux/M;
}
a[0]=i-1;
}
void reset(int a)
{
for(int j=0;j<=1000;j++)
for(int i=0;i<C;i++)
d[a][j][i] = 0;
}
void afisare(int v[C])
{
//if(v[0] == 0) out << 0;
printf("%d",v[v[0]]);
for(int i=v[0]-1 ; i>=1 ; i--)
printf("%09d",v[i]);
//out << "\n";
}
void rez()
{
int c,i1,i2;
d[0][0][0] = d[0][0][1] = 1;
for(int i=1;i<=n;i++)
{
i1 = i%2;
i2 = 1 - i1;
reset(i1);
for(int j=0;j<=1000;j++)
{
c = cmmdc(j,v[i]);
adunare(d[i1][c],d[i2][j]);
}
for(int j=0 ; j<=1000 ; j++)
adunare(d[i1][j],d[i2][j]);
// for(int j=0;j<=n;j++){
// afisare(d[i1][j]);
// out<<"\t";
//}
//out<<"\n";
}
}
int main()
{
freopen("indep.in","r",stdin);
freopen("indep.out","w",stdout);
scanf("%d",&n);
int i,j;
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
rez();
afisare(d[n%2][1]);
return 0;
}