Cod sursa(job #2714370)

Utilizator un_fes_galbendaniel guba un_fes_galben Data 1 martie 2021 18:44:31
Problema GFact Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <fstream>
#include <climits>
using namespace std;
long long fact[25],put[25];
int main()
{
    ifstream fin("gfact.in");
    ofstream fout("gfact.out");
    long long a,b;
    fin>>a>>b;
    long long d=2,cnt=0,poz=0;
    while(a>1&&d*d<=a)
    {
        cnt=0;
        while(a%d==0)
        {
            a/=d;
            cnt++;
        }
        if(cnt>0)
        {
            fact[poz]=d;
            put[poz]=cnt;
            poz++;
        }
        d++;
    }
    if(a>1)
    {
         fact[poz]=a;
         put[poz]=1;
         poz++;
    }
    for(int i=0;i<poz;i++)
    {
        put[i]*=b;
    }
    long long st=1,dr=LLONG_MAX,put1,apar,mij,val;
    double rest;
    while(dr>=st)
    {
        mij=st+(dr-st)/2;
        int ok=0;
        for(int i=0;i<poz;i++)
        {
            apar=0;
            put1=fact[i];
            while(put1<=mij)
            {
                apar+=mij/put1;
                rest=(double)mij/put1;
                if(rest<fact[i])
                {
                    break;
                }
                put1*=fact[i];
            }
            if(apar<put[i])
            {
                ok=1;
            }
        }
        if(ok==0)
        {
            val=mij;
            dr=mij-1;
        }
        else
        {
            st=mij+1;
        }
    }
    fout<<val<<'\n';
    return 0;
}