Pagini recente » Cod sursa (job #554663) | Cod sursa (job #986547) | Cod sursa (job #1892618) | Cod sursa (job #994332) | Cod sursa (job #2675334)
#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;
}