Cod sursa(job #3169664)

Utilizator xXoctavianXxStanescu Matei Octavian xXoctavianXx Data 15 noiembrie 2023 18:59:23
Problema GFact Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <bits/stdc++.h>
#define int long long

using namespace std;

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

int p,q;
bool ok(int b, int nr, int rep)
{
    int rasp = 0;
    for(int put = nr; put <= b && put > 0; put *= nr)
    {
        rasp += (b / put);
    }
    return (rasp >= q*rep);
}

vector<pair<int,int> > cautaDiv(int p)
{
    vector<pair<int,int> > rasp;
    int pcop = p;
    for(int i=2; i*i<pcop && p > 1; i++)
    {
        if(p % i == 0)
        {
            int rep = 0;
            while(p%i == 0) {p/=i; rep++;}
            rasp.push_back({i,rep});
        }
    }
    if(p != 1) rasp.push_back({p,1});
    return rasp;
}

int32_t main()
{
    fin>>p>>q;
    vector<pair<int,int>> div = cautaDiv(p);
    int st = 1,rasp=-1,dr = 1e18;
    while(st <= dr)
    {
        int mij = (st + dr) / 2;
        bool OK = true;
        for(auto pi: div)
        {
            if(!ok(mij,pi.first,pi.second)) OK = false;
        }
        if(OK)
        {
            rasp = mij;
            dr = mij-1;
        }
        else st = mij+1;
    }
    fout<<rasp;
    return 0;
}