Pagini recente » Cod sursa (job #158865) | Cod sursa (job #2164866) | Cod sursa (job #1464327) | Cod sursa (job #298403) | Cod sursa (job #489986)
Cod sursa(job #489986)
#include<cstdio>
const int base = 1000000000 ;
int S[2][1005][30],V[505],N,max ;
inline int maxim ( int A, int B )
{
return A>B?A:B;
}
inline int cmmdc ( int A, int B )
{
while ( B )
{
int R = A % B ;
A = B ;
B = R ;
}
return A ;
}
void add ( int A[30], int B[30] )
{
int i, t = 0;
for (i = 1; i <= A[0] || i <= B[0] || t; i++, t /= base)
{
if (i>A[0]) A[i]=0;
if (i>B[0]) B[i]=0;
A[i] = ( t +=A[i]+B[i] ) % base;
}
A[0] = i - 1;
}
int main ()
{
freopen ( "indep.in", "r", stdin );
freopen ( "indep.out", "w", stdout);
scanf ( "%d", &N ) ;
for ( int i = 1; i <= N; ++i )
{
scanf ( "%d", V + i ) ;
max = maxim ( max, V[i] ) ;
}
for ( int i = 1, k = 0; i <= N; ++i, k = !k )
{
S[!k][ V[i] ][0] = S[!k][ V[i] ][1] =1;
for ( int j = 1, l ; j <= max; ++j )
{
if ( S[k][j][0] )
{
l = cmmdc ( j, V[i] ) ;
add ( S[!k][l], S[k][j] ) , add ( S[!k][j], S[k][j] ) ;
}
}
for ( int j = 1; j <= max; ++j ) S[k][j][0] = 0;
}
for ( int i = S[N&1][1][0] ; i; --i ) printf ( "%d", S[N&1][1][i] ) ;
return 0;
}