Pagini recente » Cod sursa (job #2857857) | Cod sursa (job #33037) | Cod sursa (job #1225723) | Rating Nicolaescu Horia (Horica) | Cod sursa (job #547753)
Cod sursa(job #547753)
#include <algorithm>
#include <stdio.h>
#include <vector>
#define ll long long
#define pb push_back
using namespace std;
ll n, m, sol, st, el;
ll d[32];
inline ll gcd(ll a, ll b)
{
if (!b)
return a;
return gcd(b, a % b);
}
inline void back(int level, ll cmmmc)
{
if (level == n)
{
sol += st * (m / cmmmc) * (1 << (el - 1));
return;
}
back(level + 1, cmmmc);
if (st == 1)
st = -1;
else st = 1;
el++;
back(level + 1, cmmmc / gcd(cmmmc, d[level]) * d[level]);
el--;
if (st == 1)
st = -1;
else st = 1;
}
int main()
{
freopen("light2.in", "r", stdin);
freopen("light2.out", "w", stdout);
scanf("%lld", &m);
scanf("%lld", &n);
for (int i = 0; i < n; i++)
scanf("%d", &d[i]);
back(0, (ll) 1);
printf("%lld\n", sol);
fclose(stdin);
fclose(stdout);
return 0;
}