Pagini recente » Cod sursa (job #425535) | Cod sursa (job #1335849) | Cod sursa (job #1199086) | Cod sursa (job #2076674) | Cod sursa (job #541853)
Cod sursa(job #541853)
#include <fstream>
#include <algorithm>
using namespace std;
const char InFile[]="light2.in";
const char OutFile[]="light2.out";
const int MaxK=32;
const int INF=-1;
ifstream fin(InFile);
ofstream fout(OutFile);
inline long long cmmdc(long long a, long long b)
{
long long r=a%b;
while(r)
{
a=b;
b=r;
r=a%b;
}
return b;
}
inline long long cmmmc(long long a, long long b)
{
return (a*b)/cmmdc(a,b);
}
int T[MaxK],D[MaxK],K;
long long N,sol;
int main()
{
fin>>N>>K;
for(register int i=1;i<=K;++i)
{
fin>>T[i];
}
fin.close();
bool haveone=false;
sort(T+1,T+1+K);
for(register int i=1;i<=K;++i)
{
if(T[i]==1)
{
haveone=true;
}
else
{
if(D[D[0]]!=T[i])
{
D[++D[0]]=T[i];
}
else if(D[0]>0)
{
--D[0];
}
}
}
int maxcfg=1<<D[0];
for(register int cfg=1;cfg<maxcfg;++cfg)
{
int nrone=0;
long long CMMMC=1;
long long PROD=1;
int tcfg=cfg;
for(register int i=1;i<=D[0];++i,tcfg>>=1)
{
if((tcfg&1)==1)
{
++nrone;
if(CMMMC<=N)
{
CMMMC=cmmmc(CMMMC,(long long)(D[i]));
}
if(PROD<=N)
{
PROD*=(long long)(D[i]);
}
}
}
if((nrone&1)==1)
{
sol+=N/CMMMC;
}
else
{
sol-=N/CMMMC+N/PROD;
}
}
if(haveone)
{
sol=N-sol;
}
fout<<sol;
fout.close();
return 0;
}