Cod sursa(job #543846)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 28 februarie 2011 17:39:16
Problema Light2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <stdio.h>

int n;
int v[25];
long long k, sol;

long long cmmdc (long long a, long long b)
{
	while (a && b)
	{
		if (a > b)
			a %= b;
		else
			b %= a;
	}
	
	return a + b;
}

void back (int i, int nr, long long prod)
{
	if (prod > k)
		return;
	
	if (i == n + 1)
	{
		if (nr & 1)
			sol = sol + k / prod * (1 << nr - 1);
		else
			sol = sol - k / prod * (1 << nr - 1);
		return;
	}
	
	if (i == n && nr == 0)
		back (i + 1, nr + 1, prod * v[i] / cmmdc (prod, v[i]));
	else
	{
		back (i + 1, nr, prod);
		back (i + 1, nr + 1, prod * v[i] / cmmdc (prod, v[i]));
	}
}

int main ()
{
	freopen ("light2.in", "r", stdin);
	freopen ("light2.out", "w", stdout);
	
	scanf ("%lld %d", &k, &n);
	
	int i;
	
	for (i = 1; i <= n; i ++)
		scanf ("%d", &v[i]);
	
	back (1, 0, 1);
	
	printf ("%lld\n", sol);
	
	return 0;
}