Cod sursa(job #1277319)

Utilizator lokixdSebastian lokixd Data 27 noiembrie 2014 15:50:07
Problema Indep Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#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;
}