Cod sursa(job #1780514)

Utilizator dnprxDan Pracsiu dnprx Data 16 octombrie 2016 12:26:24
Problema Light2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <bits/stdc++.h>
#define P (1 << 22) + 2

using namespace std;

int m, k, d[24], cfmax;
long long n, cnt;

long long Cmmdc(long long x, long long y)
{
    long long r = x % y;
    while (r)
    {
        x = y;
        y = r;
        r = x % y;
    }
    return y;
}
void Citire()
{
    ifstream fin("light2.in");
    fin >> n;
    fin >> k;
    for (int i = 0; i < k; ++ i)
        fin >> d[i];
    fin.close();
}
void Pinex(int i, int nb, long long cmmdc)
{
    int j;
    long long cmmmc;
    for (j = i + 1; j < k; ++ j)
    {
        cmmmc = 1LL * cmmdc * d[j] / Cmmdc(cmmdc, 1LL * d[j]);
        if (cmmmc <= n)
        {
            if (nb & 1)
            cnt -= 1LL * (n / cmmmc) << nb;
            else
            cnt += 1LL * (n / cmmmc) << nb;
            Pinex(j, nb + 1, cmmmc);
        }
    }
}
void Rezolva()
{
    cfmax = 1 << k;
    Pinex(-1, 0, 1);
}
void Afisare()
{
    ofstream fout("light2.out");
    fout << cnt << "\n";
    fout.close();
}
int main()
{
    Citire();
    Rezolva();
    Afisare();
    return 0;
}