Pagini recente » Cod sursa (job #2384193) | Cod sursa (job #2788324) | Cod sursa (job #2281938) | Cod sursa (job #1828843) | Cod sursa (job #1758580)
#include <fstream>
#include <algorithm>
using namespace std;
constexpr int kMaxK = 22;
int value[kMaxK];
long long n;
int k;
long long answer = 0LL;
long long gcd(const long long a, const long long b) {
if (b == 0) {
return a;
}
return gcd(b, a - a / b * b);
}
void compute_pinex(int ptr, int sign, int cardinal, long long lcm) {
for (int i = ptr + 1; i < k; i += 1) {
const long long next_lcm = lcm * value[i] / gcd(lcm, value[i]);
if (next_lcm < n) {
answer += sign * ((n / next_lcm) << cardinal);
compute_pinex(i, -sign, cardinal + 1, next_lcm);
}
}
}
int main() {
ifstream cin("light2.in");
ofstream cout("light2.out");
cin.tie(0);
ios_base::sync_with_stdio(false);
cin >> n >> k;
for (int i = 0; i < k; i += 1) {
cin >> value[i];
}
sort(value, value + k);
reverse(value, value + k);
compute_pinex(-1, 1, 0, 1);
cout << answer << '\n';
return 0;
}