Cod sursa(job #3330406)

Utilizator aaagabiTurbinca Gabriel aaagabi Data 19 decembrie 2025 14:35:18
Problema GFact Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <vector>
#define fi first
#define se second
using namespace std;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
typedef long long ll;
vector <pair<ll,ll>> divs;
bool subexp(ll val,ll prim,ll maxi)
{
    int res=0;
    ll prod=1;
    while(prod<=val/prim)
        {
            prod*=prim;
            res+=val/prod;
            if(maxi<=res)
                return false;
        }
    return true;
}
bool check(ll val)
{
    //val! divizibil p^q, deci prim^(exp*q) deci exp(val!,prim)>=exp*q
    for(auto p:divs)
        if(subexp(val,p.fi,p.se))
        return false;
    return true;

}
int main()
{

    ll d=2;
    ll p,q;
    fin>>p>>q;
    while(p>1)
    {
        int exp=0;
        while(p%d==0)
            exp++,p/=d;
        if(exp)
            divs.push_back({d,exp*q});
        d++;
        if(d*d>p)
            d=p;
    }
    ll st=0,dr=2e9,mid,ans=0;
    while(st<=dr)
    {
        mid=(st+dr)/2;
        if(check(mid))
        {
            ans=mid;
            dr=mid-1;
        }
        else
            st=mid+1;
    }
    fout<<ans;
    return 0;
}