Cod sursa(job #3169657)

Utilizator xXoctavianXxStanescu Matei Octavian xXoctavianXx Data 15 noiembrie 2023 18:56:29
Problema GFact Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 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 rasp = 0;
    for(int put = nr; put <= b && put > 0; put *= nr)
    {
        rasp += (b / put);
    }
    return (rasp >= q);
}

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

int32_t main()
{
    fin>>p>>q;
    vector<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)) OK = false;
        }
        if(OK)
        {
            rasp = mij;
            dr = mij-1;
        }
        else st = mij+1;
    }
    fout<<rasp;
    return 0;
}