Pagini recente » Cod sursa (job #819262) | Cod sursa (job #279185) | Cod sursa (job #1371011) | Diferente pentru implica-te/arhiva-educationala intre reviziile 223 si 19 | Cod sursa (job #2243902)
#include <algorithm>
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("light2.in");
ofstream out("light2.out");
typedef long long ll;
const int DIM = 22;
int k, nr;
ll n;
ll res;
ll v[DIM];
inline ll gcd (ll x, ll y) {
ll r;
while(y) {
r = x % y;
x = y;
y = r;
}
return x;
}
void bkt (int pos, ll lcm, int no) {
lcm = (lcm * v[pos]) / gcd (lcm, v[pos]);
if (lcm > n)
return;
if((no & 1) != 0)
res += (1 << (no - 1)) * (n / lcm);
else
res -= (1 << (no - 1)) * (n / lcm);
for(int i = pos + 1; i < k; i++)
bkt(i, lcm, no + 1);
return;
}
int main () {
in >> n >> k;
for(int i = 0; i < k; i++)
in >> v[i];
sort (v, v + k);
reverse (v, v + k);
for(int i = 0; i < k; i++)
bkt(i, 1, 1);
out << res << '\n';
in.close();
out.close();
return 0;
}