Cod sursa(job #547301)

Utilizator AndreyPAndrei Poenaru AndreyP Data 6 martie 2011 10:58:15
Problema Light2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <cstdio>
#define ll long long
#define K 25

ll n;
int k;
ll d[K];
ll doi[K];
ll rez;

inline void citire() {
	scanf("%lld%d",&n,&k);

	for(int i=0; i<k; ++i)
		scanf("%lld",&d[i]);
	doi[1] = 1;
	for(int i=2; i<=k; ++i)
		doi[i] = (doi[i-1]<<1);
}

inline ll cmmmc(ll a,ll b) {
	ll a1=a,b1=b;
	ll r;

	while(b!=0LL) {
		r = a % b;
		a = b;
		b = r;
	}

	return (a1/a)*b1;
}

void back(ll x,int unde,int nrf) {
	if(k==unde) {
		if((nrf&1)==1)
                	rez += (n/x)*doi[nrf];
		else
			rez -= (n/x)*doi[nrf];
		return;
	}	

	back(x,unde+1,nrf);
       	x = cmmmc(x,d[unde]);
	if(x<=n)
		back(x,unde+1,nrf+1);
}

int main() {
	freopen("light2.in","r",stdin);
	freopen("light2.out","w",stdout);

	citire();
	back(1,0,0);
        printf("%lld\n",rez);

	return 0;
}