Cod sursa(job #543591)

Utilizator mihai_floreaFlorea Mihai Alexandru mihai_florea Data 28 februarie 2011 12:34:51
Problema Light2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include <cstdio>

typedef long long LL;

const int KMAX=22;

LL N, ans;
int K,d[KMAX];

LL gcd(LL x, LL y) { return y != 0 ? gcd(y,x%y) : x; }
LL lcm(LL x, LL y) { return x/gcd(x, y)*y; }

void back(int k, LL retlcm, int nr)
{
	if (retlcm > N) return;
	if (k==K)
	{
		LL tmp = (N/retlcm)*(1LL<<(nr-1));
		if (nr&1) ans+=tmp;
		else ans-=tmp;
		return;
	}
	back(k+1, retlcm, nr);
	back(k+1, lcm(retlcm, d[k]), nr+1);
}

int main()
{
	freopen("light2.in","r",stdin);
	scanf("%lld",&N);
	scanf("%d",&K);
	for (int i=0;i<K;++i) scanf("%d", &d[i]);

	back(0, 1, 0);

	freopen("light2.out","w",stdout);
	printf("%lld\n", ans);

	return 0;
}