Cod sursa(job #541691)

Utilizator mihai995mihai995 mihai995 Data 25 februarie 2011 13:21:32
Problema Light2 Scor 10
Compilator cpp Status done
Runda Romanian Master in Mathematics and Sciences 2011, Ziua 1 Marime 0.72 kb
#include <fstream>
using namespace std;

long long v[1<<5],n,k,nr;

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

int cmmdc(int a,int b)
{
	int c;
	while (b)
	{
		c=a%b;
		a=b;
		b=c;
	}
	return a;
}

void bkt(long long p,bool q,long long x)
{
	if (x>n)
		return;
	if (p==k+1)
	{
		if (q)
			nr+=n/x;
		else
			nr-=n/x*2;
		return;
	}
	bkt(p+1,q,x);
	bkt(p+1,!q,x/cmmdc(x,v[p])*v[p]);
}

void mic()
{
	long long i,j,p;
	for (i=1;i<=n;i++)
	{
		for (p=0,j=1;j<=k;j++)
			p+=(i%v[j]==0);
		nr+=(p&1);
	}
}

int main()
{
	long long i;
	in>>n>>k;
	for (i=1;i<=k;i++)
		in>>v[i];
	if (n<=30000000)
		mic();
	else
	{
		bkt(1,false,1);
		nr+=n;
	}
	out<<nr<<"\n";
	return 0;
}