Cod sursa(job #2966823)

Utilizator LucaMuresanMuresan Luca Valentin LucaMuresan Data 18 ianuarie 2023 15:46:24
Problema Frac Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <bits/stdc++.h>

using namespace std;

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

#define int long long

int n;

vector<int>pinex;

int check (int x)
{
    int ret = 0;

    for (int y : pinex)
    {
        ret += x / y;
    }

    return ret;
}

vector<int>divs;
bitset<15>vis;

void bkt (int k, bool df, int curr)
{
    if (k == divs.size())
    {
        if (!df)
            pinex.push_back(curr);
        else
            pinex.push_back(-curr);
        return;
    }

    if (curr % divs[k] == 0)
        curr /= divs[k], df ^= 1;

    bkt(k+1, df, curr);

    df ^= 1;
    curr *= divs[k];
    bkt(k+1, df, curr);
}

signed main()
{
    int m;
    in >> n >> m;

    int d=2;
    while (d * d <= n)
    {
        if (n % d == 0)
        {
            while (n % d == 0)
                n /= d;
            divs.push_back(d);
        }
        d++;
    }

    if (n > 1)
        divs.push_back(n);

    bkt(0, 0, 1);

    int l=1, r=2e18;

    while (l < r)
    {
        int mid = (l + r) / 2;
        if (check(mid) >= m)
            r = mid;
        else
            l = mid + 1;
    }

    out << r;

    return 0;
}