Cod sursa(job #1239489)

Utilizator laurageorgescuLaura Georgescu laurageorgescu Data 9 octombrie 2014 08:57:49
Problema Indep Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
// fara numere mari
#include<cstdio>

using namespace std;

FILE *fin = fopen( "indep.in" , "r" ), *fout = fopen( "indep.out" , "w" );

const int mxmx = 1000;
const int nmax = 500;
short int v[ nmax + 1 ];
long long d[ 2 ][ mxmx + 1];

int gcd( int a, int b ) {
    if ( b == 0 ) {
        return a;
    } else {
        return gcd( b, a % b );
    }
}
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 ] = 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 );
            d[ ind ][ r ] += d[ 1 - ind ][ j ];
        }
    }

    fprintf( fout, "%lld\n", d[ 1 - ind ][ 1 ] );

    fclose( fin );
    fclose( fout );
    return 0;
}