Cod sursa(job #541665)

Utilizator robigiirimias robert robigi Data 25 februarie 2011 13:07:24
Problema Light2 Scor 20
Compilator cpp Status done
Runda Romanian Master in Mathematics and Sciences 2011, Ziua 1 Marime 0.96 kb
#include <cstdio>
#include <cmath>

using namespace std;

FILE *f=fopen("light2.in", "r");
FILE *g=fopen("light2.out", "w");


long long n, k, v[230];

void read()
{
	fscanf(f, "%lld%lld", &n, &k);
	for (int i=1; i<=k; ++i)
		fscanf(f, "%lld", &v[i]);
}

void program()
{
	long long sol = n;  
	for (int i = 1; i < (1 << k); i++) 
	{     
		long long nr = 0, prod = 1;    
		int ok=1;
		for (int j = 0; j < k; j++)        
			if ((1 << j) & i) 
			{       
				if (n/prod<v[j+1])
				{
					prod=0;
					ok=0;
					break;
				}
				prod = 1LL * prod * v[j + 1]; 
				nr++;     
			}    

		if (ok)
		{

			float plm=static_cast <float> (nr -1);
			long long p2= static_cast <long long> (pow(2, plm));
			
			if (nr % 2) nr = -1; 
			else nr=1;
			
			sol = sol + 1LL * nr * n / prod *p2; 
		}
		
	}
		
	fprintf(g, "%lld", n-sol);
}




int main()
{
	read();
	
	program();
	
	fclose(f);
	fclose(g);
	
	return 0;
}