Cod sursa(job #1131529)

Utilizator dariusdariusMarian Darius dariusdarius Data 28 februarie 2014 21:11:32
Problema Light2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <algorithm>
#include <fstream>
using namespace std;
const int MAX_N = 25;

long long m, answer, a[MAX_N];
int n;

long long get_gcd(long long a, long long b) {
    return b ? get_gcd(b, a % b) : a;
}
void backt(int level, int count, long long current_cmmmc) {
    if(current_cmmmc > m) {
        return;
    }
    if(level == n + 1) {
        answer += ((count & 1) ? 1 : -1) * (1LL << (count - 1)) * m / current_cmmmc;
    } else {
        backt(level + 1, count, current_cmmmc);
        backt(level + 1, count + 1, current_cmmmc * a[level] / get_gcd(a[level], current_cmmmc));
    }
}

int main() {
    ifstream fin("light2.in");
    ofstream fout("light2.out");
    fin >> m >> n;
    for(int i = 1; i <= n; ++ i) {
        fin >> a[i];
    }
    backt(1, 0, 1);
    fout << m - answer << '\n';
    return 0;
}