Cod sursa(job #1059602)

Utilizator mvcl3Marian Iacob mvcl3 Data 16 decembrie 2013 20:05:12
Problema Frac Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>
#include <vector>

#define in "frac.in"
#define out "frac.out"
#define Max_Size 1000000
#define LL long long

std :: ifstream f(in);
std :: ofstream g(out);

LL N , P;

std :: vector < LL > D;

inline void Descompose_N()
{
    for(int i = 2; i * i <= N; ++i)
        if(!( N % i ))
        {
            D.push_back(i);
            while (!(N % i))    N /= i;
        }

    if(N > 1)   D.push_back(N);
}

inline void Solve()
{
    LL st = 1, dr = (LL)1 << 61, mij, sum;

    while(st <= dr)
    {
        sum = mij = (st + dr) >> 1;

        for(LL i = 1; i < (1 << D.size()); ++i)
        {
            LL prod = 1;

            for(LL j = 0; j < D.size(); ++j)
                if(i & (1 << j))    prod *= -D[j];

            sum += mij / prod;
        }

        if(sum >= P)    dr = mij - 1;
        else            st = mij + 1;
    }

    g << st << '\n';
}

int main()
{
    f >> N >> P;

    Descompose_N();
    Solve();

    g.close();
    return 0;
}