Cod sursa(job #2222950)

Utilizator ElizaTElla Rose ElizaT Data 18 iulie 2018 17:07:20
Problema Frac Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <bits/stdc++.h>

using namespace std;

vector <long long int> v;
long long int p,ans,a = 1,val;
bool ok = 1;

void func(int pc)
{
    if (val < a)
        return;
    if (ok)
        ans += val / a;
    else
        ans -= val / a;
    ok ^= 1;
    for (int i = pc - 1;i >= 0;i--)
    {
        a *= v[i];
        func(i);
        a /= v[i];
    }
}
long long int cb()
{
    long long int pas = 1LL<<61,r = 0;
    while (pas > 0)
    {
        ans = 0;
        val = r + pas;
        ok = 1;
        a = 1;
        func(v.size());
        if (ans < p)
            r += pas;
        pas >>= 1;
    }
    return r + 1;
}

int main()
{
    ifstream fin("frac.in");
    ofstream fout("frac.out");
    int b = 2;
    long long int n;
    fin >> n >> p;
    while (b * b <= n)
    {
        if (n % b == 0)
        {
            v.push_back(b);
            while (n % b == 0)
                n /= b;
        }
        b++;
    }
    if (n > 1)
        v.push_back(n);
    fout << cb();
    return 0;
}