Cod sursa(job #2796215)

Utilizator octavi26octavian octavi26 Data 7 noiembrie 2021 18:49:48
Problema GFact Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <bits/stdc++.h>
#define N 2008

using namespace std;

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

long long p, q;
vector< pair<long long, long long> > f;

void Citire()
{
    fin >> p >> q;
}

long long howMany( long long b )
{
    for( auto x : f )
    {
        long long sol = 0, p = x.first;
        while( p <= b )
        {
            sol += b / p;
            p *= x.first;
        }
        if( sol < x.second )
            return 0;
    }
    return 1;
}

long long CB()
{
    long long st, dr;
    long long mid;
    long long sol = 0;
    st = 0;
    dr = p * q;
    while( st <= dr )
    {
        mid = ( st + dr ) / 2;
        if( howMany(mid) )
            sol = mid,
            dr = mid - 1;
        else
            st = mid + 1;
    }
    return sol;
}

void Rezolvare()
{
    long long d, ct = 0;
    d = 2;

    long long P;
    P = p;
    while( p > 1 )
    {
        ct = 0;
        while( p % d == 0 )
        {
            p /= d;
            ct++;
        }
        if( ct != 0 )
            f.push_back( { d, ct * q } );

        if( d > 2 ) d += 2;
        else d = 3;

        if( d * d > p )
            d = p;
    }
    p = P;

    fout << CB();
}

int main()
{
    Citire();
    Rezolvare();
    return 0;
}