Cod sursa(job #543287)

Utilizator loginLogin Iustin Anca login Data 27 februarie 2011 20:25:02
Problema Light2 Scor 80
Compilator cpp Status done
Runda RMMS Sim Marime 0.83 kb
# include <fstream>
# include <iostream>
# define DIM 4194310
using namespace std;
int K;
long long N, sol, v[DIM];

void read ()
{
	ifstream fin ("light2.in");
	fin>>N>>K;
	long long x;
	for(int i=0;i<K;++i)
	{
		fin>>x;
		v[(1<<i)]=x;
	}
}

long long cmmdc(long long x,long long y)
{
	long long r;
	do{
		r=x%y;
		x=y;
		y=r;
	}
	while (r);
	return x;
}

void solve ()
{
	int ho=1<<K, nt, nr, uj, s;
	for(int i=1;i<ho;++i)
	{
		s=-1;
		nt=nr=0;
		for(int j=0;(1<<j)<=i;++j)
			if ((1<<j)&i)
			{
				if (nt)
					nr+=(1<<uj);
				++nt;
				uj=j;
				s*=-1;
			}
		if (nt==1)
			sol+=N/v[(1<<uj)];
		else
		{
			v[i]=v[(1<<uj)]/cmmdc(v[(1<<uj)],v[nr])*v[nr];
			if (s==-1)
				sol-=(1<<(nt-1))*(N/v[i]);
			else
				sol+=(1<<(nt-1))*(N/v[i]);
		}
	}
}
							
int main()
{
	read ();
	solve ();
	ofstream fout ("light2.out");
	fout<<sol;
	return 0;
}