Cod sursa(job #2243902)

Utilizator NeredesinI am not real Neredesin Data 21 septembrie 2018 17:35:23
Problema Light2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <algorithm>
#include <iostream>
#include <fstream>

using namespace std;

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

typedef long long ll;

const int DIM = 22;

int k, nr;

ll n;
ll res;
ll v[DIM];

inline ll gcd (ll x, ll y) {
  ll r;

  while(y) {
    r = x % y;
    x = y;
    y = r;
  }

  return x;
}

void bkt (int pos, ll lcm, int no) {
  lcm = (lcm * v[pos]) / gcd (lcm, v[pos]);

  if (lcm > n)
    return;

  if((no & 1) != 0)
    res += (1 << (no - 1)) * (n / lcm);
  else
    res -= (1 << (no - 1)) * (n / lcm);

  for(int i = pos + 1; i < k; i++)
    bkt(i, lcm, no + 1);

  return;
}

int main () {
  in >> n >> k;

  for(int i = 0; i < k; i++)
    in >> v[i];
  sort (v, v + k);
  reverse (v, v + k);

  for(int i = 0; i < k; i++)
    bkt(i, 1, 1);

  out << res << '\n';

  in.close();
  out.close();

  return 0;
}