Cod sursa(job #3177696)

Utilizator AlexSerban21Serban Alexandru AlexSerban21 Data 29 noiembrie 2023 18:43:50
Problema GFact Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin ("gfact.in");
ofstream fout ("gfact.out");
long long sum,l,x,st,mij,dr,d,ok,i,nr,nrc;
struct el
{
    long long d,nr;
};
vector <el> v;
int main ()
{
    fin>>x>>nr;
    if (x==1)
    {
        fout<<1;
        return 0;
    }
    for (d=2; d*d<=x; d++)
    {
        if (x%d==0)
        {
            nrc=0;
            while (x%d==0)
            {
                nrc++;
                x/=d;
            }
            v.push_back ({d,nrc*nr});
        }
    }
    if (x!=1)
        v.push_back ({x,nr});
    st=2;
    dr=60000000000000;
    while (st<=dr)
    {
        mij=(st+dr)/2;
        ok=1;
        for (i=0; i<v.size (); i++)
        {
            nr=v[i].d;
            l=1;
            sum=0;
            while (l<=mij/nr)
            {
                l=l*nr;
                sum+=mij/l;
            }
            if (sum<v[i].nr)
            {
                ok=0;
                break;
            }
        }
        if (ok==0)
            st=mij+1;
        else
            dr=mij-1;
    }
    fout<<st;
    return 0;
}