Pagini recente » Cod sursa (job #2071724) | Cod sursa (job #2482889) | Cod sursa (job #1689872) | Cod sursa (job #1662431) | Cod sursa (job #1534898)
#include <cstdio>
#define in "light2.in"
#define out "light2.out"
#define LL long long
#define BULB 30
using namespace std;
int v[BULB], v1[BULB], m;
LL v2[BULB], ans, n, tmp, nr = 1;
LL cmmmc(LL a,LL b)
{
if(a==0) a=1;
if(b==0) b=1;
LL tmp1=a*b, tmp2=a%b;
while(tmp2)
{
a=b;b=tmp2;
tmp2=a%b;
}
return tmp1/b;
}
inline void init()
{
tmp = m;
ans = n/v[m];
v1[m-1] = 1;
v2[nr] = v[m-1];
}
inline void solve()
{
while(tmp)
{
if(tmp == m)
{
//printf("%lld %d\n", v2[nr], nr);
//printf("check1\n");
if(nr&1) ans += (n/v2[nr]) * (1LL<<(nr-1)) - (n/cmmmc(v2[nr], v[tmp])) * (1LL<<nr);
else ans -= (n/v2[nr]) * (1LL<<(nr-1)) - (n/cmmmc(v2[nr], v[tmp])) * (1LL<<nr);
--tmp;
continue;
}
if(!v1[tmp])
{
//printf("check2\n");
v1[tmp] = 1;
v2[++nr] = cmmmc(v2[nr-1], v[tmp]);
//printf("%lld\n", cmmmc(v2[nr-1], v[tmp]));
tmp = m;
continue;
}
//printf("check3\n");
v1[tmp] = 0;
--nr;
--tmp;
}
}
int main()
{
freopen(in, "r", stdin);
freopen(out, "w", stdout);
scanf("%lld%d", &n, &m);
for(int i = 1; i<= m; ++i) scanf("%d", &v[i]);
init();
solve();
printf("%lld\n", ans);
return 0;
}