Cod sursa(job #2439165)

Utilizator AlexandruLuchianov1Alex Luchianov AlexandruLuchianov1 Data 15 iulie 2019 11:39:28
Problema Light2 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <iostream>
#include <fstream>
#include <cmath>
#include <algorithm>

using namespace std;

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

#define ll long long
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#define MAX(a, b) (((a) < (b)) ? (b) : (a))

int const nmax = 22;
ll v[1 + nmax];
ll sz, n;

ll lcm(ll a, ll b){
  if(a == 0)
    return b;
  else if(b == 0)
    return a;
  return a * b / __gcd(a, b);
}

ll backt(int pos, int sign, ll curr, ll coef){
  if(sz < curr)
    curr = sz + 1;

  if(pos == n){
    if(curr == 0)
      return 0;
    return sz / curr * sign * coef;
  } else {
    return backt(pos + 1, sign, curr, coef) + backt(pos + 1, sign * -1, lcm(curr, v[pos]), coef * 2);
  }
}

int main()
{
  in >> sz >> n;
  for(int i = 0;i < n; i++)
    in >> v[i];
  out << backt(0,  -1, 0, 1) / 2;

  return 0;
}