Cod sursa(job #543704)

Utilizator DraStiKDragos Oprica DraStiK Data 28 februarie 2011 15:12:20
Problema Light2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <algorithm>
using namespace std;

#define pb push_back
#define mp make_pair

#define MAX (1<<22)+5
#define DIM 25

int d[DIM],nrb[MAX];
long long v[MAX];
long long N,nrt;
int K,M;

void read ()
{
    int i;

    scanf ("%lld%d",&N,&K);
    for (i=1; i<=K; ++i)
        scanf ("%d",&d[i]);
}

inline int cmmdc (int a,int b)
{
    if (!b)
        return a;
    return cmmdc (b,a%b);
}

void back (int step,long long mul,int nrb)
{
    if (step==K+1)
    {
        if (nrb)
            if (nrb&1)
                nrt+=(N/mul)*(1<<(nrb-1));
            else
                nrt-=(N/mul)*(1<<(nrb-1));
    }
    else
    {
        back (step+1,mul,nrb);
        back (step+1,mul*d[step]/cmmdc (d[step],mul%d[step]),nrb+1);
    }
}

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

    read ();
    back (1,1,0);
    printf ("%lld",nrt);


    return 0;
}