Pagini recente » Borderou de evaluare (job #1507590) | Borderou de evaluare (job #531257) | Cod sursa (job #1780514)
#include <bits/stdc++.h>
#define P (1 << 22) + 2
using namespace std;
int m, k, d[24], cfmax;
long long n, cnt;
long long Cmmdc(long long x, long long y)
{
long long r = x % y;
while (r)
{
x = y;
y = r;
r = x % y;
}
return y;
}
void Citire()
{
ifstream fin("light2.in");
fin >> n;
fin >> k;
for (int i = 0; i < k; ++ i)
fin >> d[i];
fin.close();
}
void Pinex(int i, int nb, long long cmmdc)
{
int j;
long long cmmmc;
for (j = i + 1; j < k; ++ j)
{
cmmmc = 1LL * cmmdc * d[j] / Cmmdc(cmmdc, 1LL * d[j]);
if (cmmmc <= n)
{
if (nb & 1)
cnt -= 1LL * (n / cmmmc) << nb;
else
cnt += 1LL * (n / cmmmc) << nb;
Pinex(j, nb + 1, cmmmc);
}
}
}
void Rezolva()
{
cfmax = 1 << k;
Pinex(-1, 0, 1);
}
void Afisare()
{
ofstream fout("light2.out");
fout << cnt << "\n";
fout.close();
}
int main()
{
Citire();
Rezolva();
Afisare();
return 0;
}