Cod sursa(job #2675334)

Utilizator euyoTukanul euyo Data 21 noiembrie 2020 14:13:01
Problema Light2 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

const int MaxK = 22;

long long n, res;
int d[MaxK], k;

static inline long long gcd( long long a, long long b ) {
  long long r;
  while ( b > 0 ) {
    r = a % b;
	a = b;
	b = r;
  }
  return a;
}

void backtrack( int i, int q, long long lcm ) {
  if ( i == k ) {
	if ( q != 0 ) {
	  if ( q & 1 ) {
	    res += n / lcm * (1 << (q - 1));
	  } else {
	    res -= n / lcm * (1 << (q - 1));
      }    
	}
	return;
  }
  backtrack( i + 1, q, lcm );
  if ( lcm ) {
    backtrack( i + 1, q + 1, min( (lcm * d[i]) / (gcd( lcm, d[i] )), n + 1 ) );
  } else {
    backtrack( i + 1, q + 1, d[i] );
  }
}

int main() {
  fin >> n >> k;
  for ( int i = 0; i < k; ++i ) {
    fin >> d[i];
  }
  res = 0;
  backtrack( 0, 0, 1 );
  fout << res;
  fin.close();
  fout.close();
  return 0;
}