Cod sursa(job #2020530)

Utilizator MladenPMladen Puzic MladenP Data 10 septembrie 2017 16:56:27
Problema Light2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<bits/stdc++.h>
#define STIZE(x) fprintf(stderr, "STIZE%d\n", x);
#define PRINT(x) fprintf(stderr, "%s = %d\n", #x, x);
#define NL(x) printf("%c", " \n"[(x)]);
#define lld long long
#define pii pair<int,int>
#define pb push_back
#define fi first
#define se second
#define all(a) begin(a),end(a)
#define sz(a) int((a).size())
#define LINF 1000000000000000
#define INF 1000000000
#define EPS 1e-9
using namespace std;
#define MAXK 23
lld N, K;
lld d[MAXK];
lld lcm1(lld a, lld b) {
    return a*b/__gcd(a, b);
}
lld rez;
void generat(int len, int bits, int mask, lld lcm) {
    if(lcm > N) return;
    if(len == K) {
        if(bits&1) rez += (1LL<<(bits-1)) * (N/lcm);
        else rez -= (1LL<<(bits-1)) * (N/lcm);
        return;
    }
    generat(len+1, bits+1, mask|(1<<len), lcm1(lcm, d[len]));
    generat(len+1, bits, mask, lcm);
}
int main() {
    freopen("light2.in", "r", stdin);
    freopen("light2.out", "w", stdout);
    scanf("%lld%lld", &N, &K);
    for(lld i = 0; i < K; i++) {
        scanf("%lld", &d[i]);
    }
    generat(0, 0, 0, 1);
    printf("%lld", rez);
    return 0;
}