Pagini recente » Cod sursa (job #2971436) | Cod sursa (job #2455557) | Cod sursa (job #380577) | Cod sursa (job #2801500) | Cod sursa (job #494635)
Cod sursa(job #494635)
#include<cstdio>
#include<cstring>
const int N = 1<<10;
int MAX = -1 , n , d, a[2][N][200] , v[N] , unu[1];
int cmmdc(int a , int b)
{
int r;
while(b)
{
r=a%b;
a=b;
b=r;
}
return a;
}
void read()
{
freopen ( "indep.in" , "r" , stdin );
freopen ( "indep.out" , "w" , stdout );
scanf("%d" , &n);
for (int i=1 ; i<=n ; ++i )
{
scanf ( "%d" , &v[i] );
if (v[i]>MAX) MAX = v[i];
}
}
void add(int A[], 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;
}
void afis()
{
for(int i=a[n&1][1][0] ; i>0 ; --i)
printf("%d",a[n&1][1][i]);
}
void solve()
{
a[1][v[1]][0] = a[1][v[1]][1] = 1;
unu[0] = unu[1] = 1;
for (int i=2 ; i<=n ; ++i )
{
for(int j=1 ; j<=MAX ; ++j)
memset(a[i&1][j],0,200*sizeof(int));
for (int j=1 ; j<=MAX ; ++j )
{
if (a[(i-1)&1][j] != 0 )
{
d = cmmdc ( j, v[i] );
add(a[i&1][d],a[(i-1)&1][j]);
}
add(a[i&1][j],a[(i-1)&1][j]);
}
add(a[i&1][v[i]],unu);
}
if (a[n&1][1][0]!=0) afis();
else printf("0" );
}
int main()
{
read();
solve();
return 0;
}