Pagini recente » Cod sursa (job #1502284) | Cod sursa (job #1772657) | Cod sursa (job #1877945) | Cod sursa (job #1772667) | Cod sursa (job #543740)
Cod sursa(job #543740)
#include<fstream>
using namespace std;
int N,put[23],k,cmc[1<<22];
long long sol;
int d[23];
void precalculare();
void solve();
long long cmmmc(long long a,long long b);
long long cmmdc(long long a,long long b);
ofstream fout("light2.out");
int main()
{
ifstream fin("light2.in");
fin>>N;
int i;
fin>>k;
for(i=1;i<=k;i++)
fin>>d[i];
solve();
fout<<sol;
return 0;
}
void solve()
{
long long nrpasi=(1<<k)-1,i,j;
for(i=1;i<=nrpasi;i++)
{
long long nr=0,maxim=0,numar=0;
for(j=0;j<k;j++)
if((1<<j) & i)
{
nr++;
numar+=(1<<j);
if(j>maxim)
maxim=j;
}
if(nr==1)
cmc[i]=d[maxim+1];
else
cmc[i]=cmmmc(cmc[i-(1<<maxim)],d[maxim+1]);
if(nr%2==1)
sol+=(1<<(nr-1))*(N/cmc[i]);
else
sol-=(1<<(nr-1))*(N/cmc[i]);
//fout<<i<<" "<<nr<<" "<<sol<<" "<<cmc[numar]<<" "<<numar<<endl;
}
}
long long cmmmc(long long a,long long b)
{
long long bau=(long long)(a*b)/cmmdc(a,b);
if(bau>N)
return N+20;
else
return bau;
}
long long cmmdc(long long a,long long b)
{
long long r;
do{
r=a%b;
a=b;
b=r;
}
while(r);
return a;
}