Cod sursa(job #1688180)

Utilizator constantinescu15Constantinescu Mirela constantinescu15 Data 13 aprilie 2016 12:14:14
Problema GFact Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream>

using namespace std;

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

int putere (int n,int x)
{
    int rez=0;
    while(n>=x)
    {
        rez+=n/x;
        n=n/x;
    }
    return rez;
}

bool divide(int x)
{
    for(int i=1;i<=nd;i++)
        if(putere(x,d[i])<e[i]*q)
            return false;
    return true;
}

int caut ()
{
    int i=0,pas=1<<30;
    while(pas!=0)
    {
        if(!divide(i+pas))
            i+=pas;
        pas/=2;
    }
    return 1+i;
}

int main()
{
    int cp, nrp, i=0;
    ifstream cin("gfact.in");
    ofstream cout("gfact.out");
    cin>>p>>q;
    int a=2;
    cp = p;
    while(a*a<=p)
    {
        if(p%a==0)
        {
            d[++nd]=a;
            nrp=0;
            while(p%a == 0)
            {
                nrp++;
                p/=a;
            }
            e[nd]=nrp;
        }
        a++;
    }
    if(p != 1)
    {
        nd++;
        d[nd]=a;
        e[nd]=1;
    }
    p = cp;
    cout << caut() << "\n";
    return 0;
}