Cod sursa(job #3309085)

Utilizator popuPop Matei Tudor popu Data 31 august 2025 20:53:33
Problema Frac Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <bits/stdc++.h>

#define f first
#define s second
#define ll long long

using namespace std;

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

ll l = 1, r = 1ll << 61;
ll num, goal, res, m;
vector<int> divs;

void findPrimes()
{
    ll x = num;
    ll d = 2;
    while(x > 1) {
        if(x % d == 0) {
            divs.push_back(d);
            while(x % d == 0)
                x /= d;
        }
        d++;
        if(x > 1 && d * d > x)
            d = x;
    }
}

ll pinex(int it, ll prod, ll sign)
{
    ll res = m / prod * sign;
    for(int i = it; i < divs.size(); i++) {
        res += pinex(i + 1, prod * divs[i], sign * -1);
    }
    return res;
}

int main()
{
    fin >> num >> goal;
    findPrimes();
    while(l <= r) {
        m = (l + r) / 2;
        ll primes = pinex(0, 1, 1);
        if(primes < goal)
            l = m + 1;
        else
            res = m, r = m - 1;
    }
    fout << res;

    return 0;
}