Cod sursa(job #3229353)

Utilizator SSKMFSS KMF SSKMF Data 15 mai 2024 15:52:35
Problema Light2 Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>
using namespace std;

ifstream cin ("light2.in");
ofstream cout ("light2.out");

int64_t Cmmdc (const int64_t valoare_1 , const int64_t valoare_2)
{
    return valoare_2 ? Cmmdc(valoare_2 , valoare_1 % valoare_2) : valoare_1;
}

int main ()
{
    int64_t limita; int lungime;
    cin >> limita >> lungime;

    int sir[32];
    for (int indice = 1 ; indice <= lungime ; indice++)
        { cin >> sir[indice]; }

    int64_t total = 0;
    for (int masca = 1 , _limita = (1 << lungime) ; masca < _limita ; masca++)
    {
        int64_t divizor = 1; int setati = 0;
        for (int indice = 1 , putere = 1 ; putere <= masca ; indice++ , putere <<= 1)
            { if (masca & putere) { divizor = divizor / Cmmdc(divizor , sir[indice]) * sir[indice]; setati++; } }

        if (!(setati & 1)) { total -= limita / divizor * (1 << (setati - 1)); }
        else { total += limita / divizor * (1 << (setati - 1)); }
    }

    cout << total;
    cout.close(); cin.close();
    return 0;
}