Cod sursa(job #1553584)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 20 decembrie 2015 01:58:10
Problema Light2 Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <cstdio>

#define DIM 22
using namespace std;

long long V[DIM], N, LCM, sol; int i, K, nr;

inline long long GCD (long long X, long long Y) {
    long long Z;

    while (Y) {
        Z = X % Y;
        X = Y; Y = Z;
    }

    return X;
}

int main () {

    freopen ("light2.in" ,"r", stdin );
    freopen ("light2.out","w", stdout);

    scanf ("%lld %d", &N, &K);

    for (int i = 0; i < K; i ++)
        scanf ("%lld", &V[i]);

    for (int i = 1; i < (1<<K); i ++) {

        nr = 0; LCM = 1;

        for (int j = 0; j < K; j ++) {
            if (((i>>j)&1)) {
                LCM = (LCM * V[j]) / GCD (LCM, V[j]);

                if (LCM > N)
                    LCM = N + 1;

                nr ++;
            }
        }

        if ((nr&1))
            sol += (1<<(nr-1)) * 1LL * (N / LCM);
        else
            sol -= (1<<(nr-1)) * 1LL * (N / LCM);
    }

    printf ("%lld\n", sol);

    return 0;
}