Cod sursa(job #3173995)

Utilizator xXoctavianXxStanescu Matei Octavian xXoctavianXx Data 24 noiembrie 2023 09:20:06
Problema Frac Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <bits/stdc++.h>
#define int long long

using namespace std;

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

int n,p;
vector<int> d;

void calc_d() // n
{
    int sq = sqrt(n);
    for(int i=2; i <= sq; i++)
    {
        if(n%i == 0)
        {
            d.push_back(i);
            while(n%i == 0) n/=i;
        }
    }
    if(n > 1) d.push_back(n);
}

int bkt(int i, int comp, int sign, int nr)
{
    if(i == d.size())
    {
        return sign * nr / comp;
    }
    return bkt(i+1,comp,sign,nr) + bkt(i+1,comp * d[i],-sign,nr);
}

int nrnr(int nr)
{
    return bkt(0,1,1,nr);
}


int32_t main()
{
    fin>>n>>p;
    calc_d();
    int st = 0, dr = 1LL*(1<<30)*(1<<30)*2;
    //cout<<dr;
    int rasp = 0;
    while(st < dr)
    {
        int mij = (st + dr) / 2;
        if(p <= nrnr(mij))
        {
            rasp = mij;
            dr = mij-1;
        }
        else st = mij+1;
    }
    fout<<rasp;
    return 0;
}