Cod sursa(job #3353619)

Utilizator DavidMaxiDavid Diaconu DavidMaxi Data 8 mai 2026 17:15:40
Problema GFact Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("gfact.in");
ofstream fout ("gfact.out");
long long n, p, q, prim[2000], pp[2000], d, cnt, st, dr, mij, rez;
int verif(long long f){
    long long cat=0, a;
for(int i=1; i<=cnt; i++){
    a=0;
        cat=prim[i];
    while(f>=cat){
    a+=f/cat;
    cat*=prim[i];
    }
    if(a<pp[i]*q){
        return 0;
    }

}
return 1;
}
int main()
{
    fin>>p>>q;
    n=p;
    for(int d=2; d*d<=n; d++)
    {
        if(p%d==0)
        {
            prim[++cnt]=d;
            while(p%d==0)
            {
                p/=d;
                pp[cnt]++;
            }
        }
    }
    if(p!=1)
    {
        prim[++cnt]=p;
        pp[cnt]=1;
    }
    st=1;
    p=n;
    dr=p*q;
    while(st<=dr){
        mij=(st+dr)/2;
        if(verif(mij)==1){
            dr=mij-1;
            rez=mij;
        }
        else
            st=mij+1;
    }
    fout<<rez;
    return 0;
}