Cod sursa(job #544253)

Utilizator freak93Adrian Budau freak93 Data 1 martie 2011 12:10:12
Problema Light2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <cstdio>
#include <cstring>

using namespace std;

const char iname[] = "light2.in";
const char oname[] = "light2.out";

int a[25], back[25], i, p, k;
long long rez, cmmmc[25], n;

long long cmmdc(long long a, long long b) {
	if (b == 0)
		return a;
	return cmmdc(b, a % b);
}

int main() {
	freopen(iname, "r", stdin);
	freopen(oname, "w", stdout);

	scanf("%lld", &n);
	scanf("%d", &k);
	for (i = 1; i <= k; ++i)
		scanf("%d", &a[i]);
	p = 1;   
	cmmmc[0] = 1;
	while (p > 0)
		{
			++back[p];
			if (back[p] > k) {
				--p;
				continue;
			}
			cmmmc[p] = (a[back[p]] / cmmdc(a[back[p]], cmmmc[p - 1])) * cmmmc[p - 1];
			if (cmmmc[p] > n)
				continue;
			if (p % 2 == 1)
				rez += (n / cmmmc[p]) * (1LL << (p - 1));
			else
				rez -= (n / cmmmc[p]) * (1LL << (p - 1));
			back[p + 1] = back[p];
			++p;
		}
	
	printf("%lld\n", rez);
}