Cod sursa(job #550730)

Utilizator maritimCristian Lambru maritim Data 9 martie 2011 21:21:00
Problema Light2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<stdio.h>

#define ll long long

using namespace std;

ll n;
ll k;
ll D[23];
int L[23];
ll nr = 0;
ll Doi[23];

void citire(void)
{
	FILE *f = fopen("light2.in","r");
	
	fscanf(f,"%lld %d",&n,&k);
	for(long int i=1;i<=k;i++)
		fscanf(f,"%d ",&D[i]);
	
	fclose(f);
}

void afisare(int v)
{
	for(int i=1;i<=v;i++)
		printf("%d ",D[i]);
}

ll cmmmc(ll a,ll b)
{
	ll r = a%b;
	ll a1 = a;
	ll b1 = b;
	while(r)
	{
		a1 = b1;
		b1 = r;
		r = a1%b1;
	}
	return ((long long)(a*b)/b1);
}

void calc(int a,ll prod,long int nri)
{
	prod = cmmmc(prod,D[a]);
	if(!(nri%2))
	  nr -= (Doi[nri]*(n/prod));
	else
	  nr += (Doi[nri]*(n/prod));
	for(int i=a+1;i<=k;i++)
		calc(i,prod,nri+1);
}

void doi(void)
{
	Doi[1] = 1;
	for(int i=2;i<=23;i++)
		Doi[i] = Doi[i-1]*2; 
}

int main()
{	
	FILE *f = fopen("light2.out","w");
	
	citire();
	doi();
	nr = 0;
	for(int i=1;i<=k;i++)
		calc(i,1,1);
	fprintf(f,"%lld ",nr);
	
	fclose(f);
	return 0;
}