Cod sursa(job #543702)

Utilizator GavrilaVladGavrila Vlad GavrilaVlad Data 28 februarie 2011 15:08:26
Problema Light2 Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <stdio.h>

using namespace std;

#define maxn 33

int i, j, k;
long long n, ras;
int v[maxn];

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(int poz, long long cmmmc, int mk)
{
    if(poz==k+1)
    {
        if(mk==0)
            return;
        if(mk%2)
            ras+=n/cmmmc*(1<<(mk-1));
        else
            ras-=n/cmmmc*(1<<(mk-1));
        return;
    }
    back(poz+1, cmmmc, mk);
    long long x=cmmdc(v[poz], cmmmc);
    if(cmmmc/x*v[poz]>n)
        return;
    back(poz+1, cmmmc/x*v[poz], mk+1);
}


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

    scanf("%lld%d", &n, &k);
    for(int i=1; i<=n; ++i)
        scanf("%d", &v[i]);

    back(1, 1, 0);

    printf("%lld\n", ras);
    return 0;
}