Cod sursa(job #541678)

Utilizator eudanipEugenie Daniel Posdarascu eudanip Data 25 februarie 2011 13:13:23
Problema Light2 Scor 100
Compilator cpp Status done
Runda Romanian Master in Mathematics and Sciences 2011, Ziua 1 Marime 0.8 kb
#include<stdio.h>

#define ll long long

ll n,v[29],rez;
int k;

ll cmmmc(ll a,ll b)
{
    ll aux,sol=a*b;
    while(a%b)
    {
        aux=b;
        b=a%b;
        a=aux;
    }
    return sol/b;
}

void verif(int biti,ll val)
{
    ll r=n/val;
    if(biti&1)
        rez+=r*(1<<(biti-1));
    else
        rez-=r*(1<<(biti-1));
}

void back(int poz,int bit,ll val)
{
    if(poz==k+1 || val>n)
        return ;
    ll cval=cmmmc(val,v[poz]);
    verif(bit+1,cval);
    back(poz+1,bit+1,cval);
    back(poz+1,bit,val);
}

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