Cod sursa(job #1237936)

Utilizator enedumitruene dumitru enedumitru Data 5 octombrie 2014 11:27:04
Problema Light2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.64 kb
#include<cstdio>
#define ll long long
using namespace std;
int k,i,p,a[25],b[25];
ll n,rez,cmmmc[25];
ll Euclid(ll a, ll b) 
{	while(b) {ll r=a%b; a=b; b=r;};
    return a;
}
int main()
{   freopen("light2.in","r",stdin); freopen("light2.out","w",stdout);
    scanf("%lld%d", &n,&k);
    for(i=1;i<=k;++i) scanf("%d",&a[i]);
    p=1; cmmmc[0]=1;
    while(p)
	{	++b[p];
		if(b[p]<=k)
		{	cmmmc[p]=(a[b[p]]/Euclid(a[b[p]],cmmmc[p - 1]))*cmmmc[p-1];
			if(cmmmc[p]<=n)
			{	ll t=(n/cmmmc[p])*(1LL<<(p-1));
				if(p%2) rez+=t;	else rez-=t;
				b[p+1]=b[p];
				++p;
			}
		}
		else --p;
	}
    printf("%lld\n",rez);
	return 0;
}