Cod sursa(job #783492)

Utilizator ionut_blesneagIonut Blesneag ionut_blesneag Data 2 septembrie 2012 23:40:05
Problema Light2 Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<fstream>
#include<cstring>
using namespace std;

ifstream f("light2.in");
ofstream g("light2.out");

long long N,nr,d[30];
long long K,i,nrc;
char buff[200];

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;
}

void prelucreaza(long long position, long long value, long long sign, long long multiplicity)
{long long cmmmc;
for(long long j=position+1; j<=K; j++)
{cmmmc=(d[j]*value)/cmmdc(d[j],value);
nr+=(N/cmmmc)*sign*multiplicity;
prelucreaza(j,cmmmc,-sign,2*multiplicity);}
}

long long get_long()
{long long nrn=0;
while(buff[nrc]<='9' && buff[nrc]>='0')
 {nrn=10*nrn+buff[nrc]-'0';
  nrc++;}
return nrn;}

int main()
{
f.getline(buff,200);  nrc=0;
N=get_long();
f.getline(buff,200);  nrc=0;
K=get_long();
f.getline(buff,200);  nrc=0;
for(i=1; i<=K; i++)
  {d[i]=get_long();   nrc++;
   nr+=N/d[i];}
for(i=1; i<=K; i++)
  prelucreaza(i,d[i],-1,2);  
g<<nr;   
f.close();
g.close();
return 0;}