Cod sursa(job #540551)

Utilizator DITzoneCAdrian Diaconu DITzoneC Data 24 februarie 2011 01:10:58
Problema Light2 Scor Ascuns
Compilator cpp Status done
Runda Marime 0.71 kb
#include <cstdio>

int k, A[32];
long long n, sol;

int gcd(long long a, int b)
{
  while(a && b)
    if(a >= b)
      a %= b;
    else
      b %= a;
  return a | b;
}

void doit(int i, int nrA, int nrB, long long p)
{
  if(p > n)
    return;
  if(i == k)
  {
    if(nrA)
      if(nrB)
        sol -= n / p;
      else
        sol += n / p;
    return ;
  }
  doit(i + 1, nrA, nrB, p);
  p = p / gcd(p, A[i]) * A[i];
  doit(i + 1, nrA ^ 1, nrB, p);
  doit(i + 1, nrA, nrB ^ 1, p);
}

int main()
{
  int i;
  freopen("light2.in", "r", stdin);
  freopen("light2.out", "w", stdout);
  scanf("%lld", &n);
  scanf("%d", &k);
  for(i = 0; i < k; ++ i)
    scanf("%d", &A[i]);
  doit(0, 0, 0, 1);
  printf("%lld\n", sol);
  return 0;
}