Cod sursa(job #3340341)

Utilizator BuzdiBuzdugan Rares Andrei Buzdi Data 13 februarie 2026 19:14:25
Problema Mins Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <bits/stdc++.h>
#define ll long long

using namespace std;

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

const int NMAX = 1e6;

int n, m;
vector<int> factors[NMAX + 1];
ll answer;

void eratostene() {
    for(int i = 2; i * i <= NMAX; i++) {
        if(factors[i].empty()) {
            for(int j = i; j <= NMAX; j += i) {
                factors[j].push_back(i);
            }
        }
    }
}

ll ired(int x) {
    int sz = factors[x].size();
    ll answer = m;
    for(int mask = 1; mask < (1 << sz); mask++) {
        ll prod = 1;
        for(int i = 0; i < sz; i++) {
            if(mask >> i & 1) {
                prod *= factors[x][i];
            }
        }

        int sign = (__builtin_popcount(mask) % 2 == 1 ? -1 : 1);
        answer += sign * m / prod;
    }
//    cout << x << ' ' << answer << '\n';
    return answer;
}

signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    eratostene();

    fin >> n >> m;
    n--; m--;
    for(int x = 1; x <= n; x++) {
        answer += ired(x);
    }
    fout << answer << '\n';
    return 0;
}