Cod sursa(job #2632838)

Utilizator George1Simion George George1 Data 5 iulie 2020 11:17:49
Problema GFact Scor 75
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <iostream>
#include <cmath>
#include <fstream>

using namespace std;

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

int fact[50000],putere[50000],rez;

int verif(int nrdiv, int q, int b)
{
    for (int i=1; i<=nrdiv; i++)
    {
        int factor=fact[i];
        int aux=b;
        int nrp=0;

        while (aux>0)
        {
            nrp=nrp+(aux/factor);
            aux=aux/factor;
        }
        if (nrp < putere[i]*q)
        {
            return 0;
        }
    }

    return 1;
}

void caut_bin(int nrdiv, int q, int p)
{
    int st=1,dr=2000000000;
    while (st <= dr)
    {
        int mij=(st+dr)/2;

        if (verif(nrdiv,q,mij) == 1)
        {
            rez=mij;
            dr=mij-1;
        }
        else
        {
            st=mij+1;
        }
    }
}

int main()
{
    int p,q,nrdiv=0,d,put;
    f>>p>>q;

    d=2;
    while (d*d <= p)
    {
        put=0;
        while (p%d==0)
        {
            p=p/d;
            put=put+1;
        }
        if (put>0)
        {
            nrdiv=nrdiv+1;
            fact[nrdiv]=d;
            putere[nrdiv]=put;
        }
        d=d+1;
    }

    if (p>1)
    {
        nrdiv=nrdiv+1;
        fact[nrdiv]=p;
        putere[nrdiv]=1;
    }

   caut_bin(nrdiv, q, p);
   g<<rez<<'\n';
    return 0;
}