Pagini recente » Cod sursa (job #78686) | Cod sursa (job #1032851) | Cod sursa (job #53360) | Cod sursa (job #2802470) | Cod sursa (job #2246736)
#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 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, long long cmmmc, int level) {
if (cmmmc > n)
return;
if (poz > k) {
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 {
back (poz + 1, cmmmc, level);
back (poz + 1, cmmmc * d[poz] / cmmdc (cmmmc, d[poz]), level + 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, 1, 0);
fprintf (fout, "%lld", sol);
fclose (fin);
fclose (fout);
return 0;
}