Cod sursa(job #2282736)

Utilizator vlad_cvlad carasel vlad_c Data 14 noiembrie 2018 14:18:19
Problema GFact Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>

using namespace std;

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

const int ND=10,L=45;

int p,q,d[ND],e[ND],nd;

void descompunere (int n)
{
    int dv=2;
    while (dv*dv<=n)
    {
        if (n%dv==0)
        {
            d[nd]=dv;
            while (n%dv==0)
            {
                e[nd]++;
                n/=dv;
            }
            nd++;
        }
        dv++;
    }
    if (n>1)
    {
        d[nd]=n;
        e[nd++]=1;
    }
}
long long putere (long long n,int p)
{
    long long r=0;
    while (n>=p)
    {
        r+=n/p;
        n/=p;
    }
    return r;
}
bool divfact (long long n)
{
    for (int i=0;i<nd;i++)
    {
        if (putere (n,d[i])<e[i]*q)
        {
            return false;
        }
    }
    return true;
}
long long cautb ()
{
    long long r=2,pas=1LL<<L;
    while (pas!=0)
    {
        if (!divfact(r+pas))
        {
            r+=pas;
        }
        pas/=2;
    }
    r++;
    return r;
}
int main()
{
    in >>p>>q;
    descompunere(p);
    out<<cautb();
    return 0;
}