Cod sursa(job #2269921)

Utilizator DavvDrgDavid Dragostin DavvDrg Data 26 octombrie 2018 19:22:59
Problema GFact Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<fstream>
using namespace std;

ifstream cin("gfact.in");
ofstream cout("gfact.out");
const long long lim=1LL<<50;
long long div1[500],put[500],n,baza,exp;
void div1izori(long long x)
{
    long int i;
    for(i=2; i*i<=x; i++)
        if(x%i==0)
        {
            n++;
            div1[n]=i;
            while(x%i==0)
            {
                x/=i;


                put[n]++;
            }
        }
    if(x!=1)
    {
        n++;
        div1[n]=x;
        put[n]=1;
    }
}
long long verif(long long x)
{
    long long i,k,sum;
    for(i=1; i<=n; i++)
    {
        sum=0;
        k=div1[i];
        while(x/k>0)
        {
            sum+=x/k;
            k=k*div1[i];
        }
        if(sum<put[i]*exp)
            return 0;
    }
    return 1;
}
int main()
{
    long long st,dr,mij,rasp=0;
    cin>>baza>>exp;
    div1izori(baza);
    st=0;
    dr=lim;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(verif(mij)==1)
        {
            rasp=mij;
            dr=mij-1;
        }
        else
            st=mij+1;
    }
    cout<<rasp;
    return 0;


}