Cod sursa(job #1553590)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 20 decembrie 2015 02:05:53
Problema Light2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <cstdio>
#include <algorithm>

#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;
}

void backTrack (int pos, long long LCM, int nrBit) {
    LCM = (LCM * V[pos]) / GCD (LCM, V[pos]);

    if (LCM > N)
        return;

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

    for (int i = pos + 1; i < K; i ++)
        backTrack (i, LCM, nrBit + 1);

    return;
}

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]);

    sort (V, V + K);
    reverse (V, V + K);

    for (int i = 0; i < K; i ++)
        backTrack (i, 1, 1);

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

    return 0;
}