Cod sursa(job #2892173)

Utilizator Alex_tz307Lorintz Alexandru Alex_tz307 Data 21 aprilie 2022 00:14:37
Problema Light2 Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("light2.in");
ofstream fout("light2.out");

int64_t lcm(int64_t x, int64_t y) {
  return x / __gcd(x, y) * y;
}

void testCase() {
  int64_t n;
  fin >> n;
  int m;
  fin >> m;
  vector<int> a(m);
  for (int &x : a) {
    fin >> x;
  }
  sort(a.rbegin(), a.rend());
  int64_t ans = 0;
  for (int mask = 1; mask < (1 << m); ++mask) {
    int num = 1;
    for (int i = 0; (1 << i) <= mask; ++i) {
      if (mask & (1 << i)) {
        num = lcm(num, a[i]);
        if (n < num) {
          break;
        }
      }
    }
    int cnt = __builtin_popcount(mask);
    if (cnt % 2 == 1) {
      ans += (n / num) * (1 << (cnt - 1));
    } else {
      ans -= (n / num) * (1 << (cnt - 1));
    }
  }
  fout << ans << '\n';
}

int main() {
  int tests = 1;
  for (int tc = 1; tc <= tests; ++tc) {
    testCase();
  }
  fin.close();
  fout.close();
  return 0;
}