Cod sursa(job #2240342)

Utilizator laurageorgescuLaura Georgescu laurageorgescu Data 13 septembrie 2018 09:44:25
Problema Light2 Scor 10
Compilator cpp Status done
Runda simulare_prega Marime 0.89 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin ("light2.in"); ofstream fout ("light2.out");

typedef long long i64;
const int kmax = 22;

int k;
i64 n, ans = 0;
int v[kmax + 1];

int gcd (i64 a, int b) {
    while (b > 0) {
        int r = a % b;
        a = b;
        b = r;
    }
    return a;
}

void bck (int pos, i64 d, int cnt) {
    if (d > n)
        return ;

    if (pos == k) {
        if (cnt > 0) {
            if (cnt == 1)
                ans += n / d;
            else if (cnt % 2 == 0)
                ans -= 2 * n / d;
            else
                ans += 2 * n / d;
        }
        return ;
    }

    bck(pos + 1, d, cnt);
    bck(pos + 1, d * v[pos] / gcd(d, v[pos]), cnt + 1);
}

int main () {
    fin >> n >> k;

    for (int i = 0; i < k; ++ i) {
        fin >> v[i];
    }

    bck(0, 1, 0);

    fout << ans << "\n";

    fin.close();
    fout.close();
    return 0;
}