Pagini recente » Cod sursa (job #2404744) | Cod sursa (job #2011225) | Cod sursa (job #2087675) | Cod sursa (job #820876) | Cod sursa (job #2020503)
#include <bits/stdc++.h>
using namespace std;
long long a[22];
long long nzs[3000000];
short jed[5000000];
long long gcd(long long a,long long b)
{
if(b%a==0) return a;
return gcd(b%a,a);
}
int main()
{
freopen("light2.in","r",stdin);
freopen("light2.out","w",stdout);
int k;
long long n,rez=0;
scanf("%lld %d",&n,&k);
for(int i=0;i<k;i++) scanf("%d",&a[i]);
nzs[0]=1;
for(int i=1;i<(1<<k);i++)
{
int r=i,x=0;
nzs[i]=1;
bool m=true;
for(int j=0;j<k;j++)
{
int t=r%2;
if(m&&t==1)
{
jed[i]=x=jed[i xor (1<<j)]+1;
if(nzs[i xor (1<<j)]<=n) nzs[i]=a[j]*nzs[i xor (1<<j)]/gcd(fmin(a[j],nzs[i xor (1<<j)]),fmax(a[j],nzs[i xor (1<<j)]));
else nzs[i]=nzs[i xor (1<<j)];
break;
}
r/=2;
}
int sg=(x%2==0?-1:1);
if(m) rez+=sg*(1<<(x-1))*(n/nzs[i]);
}
printf("%lld",rez);
fclose(stdout);
}