Cod sursa(job #682669)

Utilizator VmanDuta Vlad Vman Data 19 februarie 2012 12:58:46
Problema Light2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <cstdio>

int K, nr, i, j;
long long N, D[22], sol;

long long cmmdc(long long a, long long b)
{
     long long r = a % b;
     while (r)
     {
           a = b;
           b = r;
           r = a % b;
     }
          
     return b;
}

void back(long long t, int lvl, int p)
{
     if (lvl == K) return;
     
     back(t, lvl+1, p);
     
     t = t * D[lvl] / cmmdc(t, D[lvl]);
     
     if (p & 1) sol += N / t * (1<<(p-1));
           else sol -= N / t * (1<<(p-1)); 

     back(t, lvl+1, p+1);
}

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