Cod sursa(job #543280)

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

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

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

void solve ()
{
	int ho=1<<K, nt, nr, uj, s;
	long long var;
	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
		{
			if (v[(1<<uj)]<=N && v[nr]<=N)
			{
				var=(long long)v[(1<<uj)]/(long long)cmmdc(v[(1<<uj)],v[nr])*(long long)v[nr];
				if (var<=N)
					v[i]=var;
				else
					v[i]=N+1;
			}
			else
				v[i]=N+1;
			if (v[i]<=N)
			{
				if (s==-1)
					sol-=(1ll<<(nt-1))*(N/(long long)v[i]);
				else
					sol+=(1ll<<(nt-1))*(N/(long long)v[i]);
			}
		}
	}
}
							
int main()
{
	read ();
	solve ();
	ofstream fout ("light2.out");
	fout<<sol;
	return 0;
}