Cod sursa(job #543673)

Utilizator SpiderManSimoiu Robert SpiderMan Data 28 februarie 2011 14:22:41
Problema Light2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
# include <cstdio>

typedef long long ll ;
const char *FIN = "light2.in", *FOU = "light2.out" ;
const int MAX = 30 ;

ll N, sol ;
int C[2][MAX] ;
int P[MAX], bl[MAX], d[MAX] ;

int K ;

inline ll euclid ( ll A, ll B ) {
    while ( B ) {
        int R = A % B ;
        A = B ;
        B = R ;
    }

    return A ;
}

void prec ( void ) {
    for ( int i = 1; i <= K; ++i ) {
        P[i] = 1 << i - 1 ;
    }
}


void pinex (int lvl, int X, ll see) {
    if ( see > N ) return ;

    if (lvl == K) {
        sol += ( X & 1 ? (N / see) * P[X] : (N / see) * -P[X] ) ;
        return ;
    }

    bl[lvl] = 0, pinex ( lvl + 1, X, see ) ;
    bl[lvl] = 1, pinex ( lvl + 1, X + 1, see * d[lvl] / euclid(see, d[lvl]) );
}

int main ( void ) {
    freopen ( "light2.in", "r", stdin ) ;

    scanf ( "%lld %d", &N, &K ) ;
    for (int i = 0; i < K; ++i)
        scanf ( "%d", d + i ) ;

    prec () ;

    pinex (0, 0, 1) ;

    fprintf ( fopen ( "light2.out", "w" ) , "%lld", sol ) ;
}