Cod sursa(job #1257307)

Utilizator xtreme77Patrick Sava xtreme77 Data 7 noiembrie 2014 16:28:04
Problema Indep Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
/*
 * Code by Spiromanul
 */

#include <cstdio>
#include <cstdlib>
#include <cstring>

using namespace std;

const int NMAX = 1005, BASE = 1000000000;

int N, V[ NMAX ] , din[ NMAX ] [ 110 ] , tmp [ 110 ] ;

int GCD( int A , int B )
{
    if( not B ) return A;
    return GCD( B , A % B ) ;
}

void SUM( int A [ 110 ] , int B [ 110 ] )
{
    int i, T = 0;
    for(i = 1; i <= A[0] || i <= B[0] || T ; ++ i, T /= BASE )
        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 ) ;

    tmp [ 0 ] = tmp [ 1 ] = 1 ;

    for( int i = 1 ; i <= N ; ++ i )
    {
        for( int j = 1 ; j <= 1000 ; ++ j )
            SUM ( din [ GCD ( j , V [ i ] ) ] , din [ j ] ) ;
        SUM ( din [ V [ i ] ] , tmp ) ;
    }

    if ( din [ 1 ] [ 0 ] == 0 ) printf( "0\n" ) ;
    else
    {
        printf ( "%d" , din [ 1 ] [ din [ 1 ] [ 0 ] ] );
        for( int i =  din [ 1 ] [ 0 ] - 1; i ; -- i)
            printf( "%09d" , din [ 1 ] [ i ] ) ;
        printf( "\n" ) ;
    }

    return 0;
}