Pagini recente » Cod sursa (job #346475) | Cod sursa (job #1961635) | Cod sursa (job #1750847) | Cod sursa (job #1311091) | Cod sursa (job #478112)
Cod sursa(job #478112)
# include <cstdio>
typedef int Mare[45] ;
const char FIN[] = "indep.in", FOU[] = "indep.out" ;
const int base = 1000000000 ;
Mare S[2][1005] ;
int V[505] ;
int N, max ;
inline int maxim ( int A, int B ) {
if ( A > B ) {
return A ;
} else {
return B ;
}
}
inline int cmmdc ( int A, int B ) {
while ( B ) {
int R = A % B ;
A = B ;
B = R ;
}
return A ;
}
void add ( Mare A, Mare B ) {
int i, t = 0;
for (i = 1; i <= A[0] || i <= B[0] || t; i++, t /= base) {
A[i] = ( t += ( i <= A[0] ? A[i] : A[i] = 0 ) + ( i <= B[0] ? B[i] : B[i] = 0 ) ) % base;
}
A[0] = i - 1;
}
void afis ( Mare A ) {
printf ( "%d" , A[A[0]] ) ;
for ( int i = A[0] - 1; i ; --i ) {
printf ( "%09d", A[i] ) ;
}
}
int main ( void ) {
freopen ( FIN, "r", stdin ) ;
freopen ( FOU, "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;
}
}
afis ( S[N & 1][1] ) ;
return 0;
}