Pagini recente » Cod sursa (job #1186407) | Cod sursa (job #669246) | Cod sursa (job #954483) | Cod sursa (job #1857760) | Cod sursa (job #1239507)
#include<cstdio>
#include<vector>
using namespace std;
FILE *fin = fopen( "indep.in" , "r" ), *fout = fopen( "indep.out" , "w" );
const int mxmx = 1000;
const int base = 100000000;
const int nmax = 500;
short int v[ nmax + 1 ];
vector <int> d[ 2 ][ mxmx + 1];
int gcd( int a, int b ) {
if ( b == 0 ) {
return a;
} else {
return gcd( b, a % b );
}
}
void hh_add( vector <int> &x, vector <int> y ) {
int t = 0;
for( int i = 0; i < (int)x.size() || i < (int)y.size() || t != 0; ++ i ) {
if ( i == (int)x.size() ) {
x.push_back( 0 );
}
if ( i < (int)y.size() ) {
x[ i ] += y[ i ];
}
x[ i ] += t;
t = x[ i ] / base;
x[ i ] %= base;
}
}
void af_ok( int x ) {
if ( x > base / 10 ) {
fprintf( fout, "%d", x );
}
fprintf( fout, "0" );
af_ok( x * 10 );
}
void afiseaza( vector <int> x ) {
if ( x.size() == 0 ) {
fprintf( fout, "0\n" );
return ;
}
fprintf( fout, "%d", x[ x.size() - 1 ] );
for( int i = (int)x.size() - 2; i >= 0; -- i ) {
af_ok( x[ i ] );
}
fprintf( fout, "\n" );
}
int main() {
int n, mx, ind, r;
fscanf( fin, "%d", &n );
mx = 0;
for( int i = 1; i <= n; ++ i ) {
fscanf( fin, "%hd", &v[ i ] );
mx = mx < v[ i ] ? v[ i ] : mx;
}
ind = 1;
d[ 0 ][ 0 ].push_back( 1 );
for( int i = 1; i <= n; ++ i, ind = 1 - ind ) {
for( int j = 0; j <= mx; ++ j ) {
d[ ind ][ j ] = d[ 1 - ind ][ j ];
}
for( int j = 0; j <= mx; ++ j ) {
r = gcd( (int)v[ i ], j );
hh_add( d[ ind ][ r ], d[ 1 - ind ][ j ] );
}
}
afiseaza( d[ 1 - ind ][ 1 ] );
fclose( fin );
fclose( fout );
return 0;
}