Pagini recente » Cod sursa (job #2602236) | Cod sursa (job #43618) | Cod sursa (job #2261767) | Cod sursa (job #3268439) | Cod sursa (job #2246728)
#include <bits/stdc++.h>
using namespace std;
FILE *fin = fopen ("light2.in", "r"), *fout = fopen ("light2.out", "w");
const int MAXK = 22;
int k;
long long n, sol;
int a[MAXK + 1], d[MAXK + 1];
inline long long cmmdc (long long a, long long b) {
while (b > 0) {
long long r = a % b;
a = b;
b = r;
}
return a;
}
inline void back (int poz) {
if (poz > k) {
long long cmmmc = 1;
int level = 0;
for (int i = 1; i <= k; i++)
if (a[i]) {
level++;
cmmmc = cmmmc * d[i] / cmmdc (cmmmc, d[i]);
if (cmmmc > n)
return;
}
if (level == 0)
return;
//fprintf (fout, "%lld\n", cmmmc);
if (level % 2)
sol = sol + n / cmmmc * (1 << (level - 1));
else
sol = sol - n / cmmmc * (1 << (level - 1));
}
else {
a[poz] = 0;
back (poz + 1);
a[poz] = 1;
back (poz + 1);
}
}
int main() {
fscanf (fin, "%lld%d", &n, &k);
for (int i = 1; i <= k; i++)
fscanf (fin, "%d", &d[i]);
sol = 0;
back (1);
fprintf (fout, "%lld", sol);
fclose (fin);
fclose (fout);
return 0;
}