Cod sursa(job #2530473)

Utilizator AndreiCroitoruAndrei Croitoru AndreiCroitoru Data 24 ianuarie 2020 20:43:54
Problema GFact Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>
#define int long long
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
int v[31],putere[31],elem;
bool verific(int x, int q)
{
    int s=0,b,i;
    for(i=1; i<=elem; i++)
    {
        s=0;
        b=v[i];
        while(b<=x)
        {
            s+=x/b;
            b*=v[i];
        }
        if(s<putere[i]*q)
            return 0;
    }
    return 1;
}
int32_t main()
{
    int p,q,i,mij,st=1,dr=(1LL<<50),ans;
    in>>p>>q;
    for(i=2; i*i<=p; i++)
    {
        if(p%i==0)
        {
            v[++elem]=i;
            while(p%i==0)
            {
                putere[elem]++;
                p/=i;
            }
        }
    }
    if(p>1)
    {
        v[++elem]=p;
        putere[elem]=1;
    }
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(verific(mij,q)==1)
        {
            dr=mij-1;
            ans=mij;
        }
        else
            st=mij+1;
    }
    out<<ans;
    return 0;
}