Cod sursa(job #549585)

Utilizator maritimCristian Lambru maritim Data 8 martie 2011 19:46:21
Problema Light2 Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<stdio.h>

#define ll long long

using namespace std;

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

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]);
		nr += n/D[i];
	}
	
	fclose(f);
}

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

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

int main()
{	
	FILE *f = fopen("light2.out","w");
	
	citire();
	nr = 0;
	for(int i=1;i<=k;i++)
		for(int j=1;j<=k;j++)
			if(i!=j && D[i]%D[j] == 0)
			{
				nr -= n/D[i];
				L[i] ++ ;
			}
	for(int i=1;i<=k;i++)
		if(L[i]%2 == 0)
		  calc(i,D[i],1,1);
	fprintf(f,"%d ",nr);
	
	fclose(f);
	return 0;
}