Cod sursa(job #2180159)

Utilizator giotoPopescu Ioan gioto Data 20 martie 2018 17:45:42
Problema Light2 Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <bits/stdc++.h>
using namespace std;

int k;
bool ok;
int a[25];
long long Sol;
long long n;
set <int> S;
inline void back(int nr, int j, long long x){
    if(x > n) return ;
    if(nr > 0){
        if(nr % 2 == 1){
            Sol = Sol + (1 << (nr - 1)) * (n / x);
        }
        else{
            Sol = Sol - (1 << (nr - 1)) * (n / x);
        }
    }
    for(int i = j; i <= k ; ++i)
        back(nr + 1, i + 1, x * a[i]);
}
int main(){
    freopen("light2.in", "r", stdin);
    freopen("light2.out", "w", stdout);
    scanf("%lld", &n);
    scanf("%d", &k);
    int x;
    for(int i = 1; i <= k ; ++i){
        scanf("%d", &x);
        if(S.find(x) == S.end()) S.insert(x);
        else S.erase(x);
    }
    k = 0;
//    if(S.find(1) != S.end()) ok = 1, S.erase(1), Sol = n;
    for(auto it : S)
        a[++k] = it;
    back(0, 1, 1);
    printf("%lld", Sol);
    return 0;
}