Cod sursa(job #3174306)

Utilizator Alexbora13Bora Ioan Alexandru Alexbora13 Data 24 noiembrie 2023 17:07:24
Problema GFact Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <bits/stdc++.h>
#define ull unsigned long long int
using namespace std;

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

vector <pair <ull,ull>> puteri;
ull p, q;

int factorizare(ull f, ull x)
{
    ull sol = 0;
    while(f)
    {
        sol+=f/x;
        f/=x;
    }
    return sol;
}

int ok(ull x)
{
    for(pair <ull,ull>a : puteri)
    {
        if(factorizare(x,a.first)<a.second*q)
            return 0;
    }
    return 1;
}

int main()
{
    ios::sync_with_stdio(false);
    fin.tie(NULL);
    fout.tie(NULL);
    fin >> p >> q;
    int cnt_2=0;
    while(p%2==0)
    {
        cnt_2++;
        p/=2;
    }
    puteri.push_back(make_pair(2,cnt_2));
    for(int d=3; d*d<=p; d+=2)
    {
        int exp = 0;
        if(p%d==0)
        {
            while(p%d==0)
            {
                exp++;
                p/=d;
            }
            puteri.push_back(make_pair(d,exp));
        }
    }
    if(p!=1)
        puteri.push_back(make_pair(p,1));

    ull st = 1, dr  = LLONG_MAX;
    while(st<=dr)
    {
        ull mij = (st+dr)/2;
        if(ok(mij))
            dr = mij-1;
        else
            st = mij+1;
    }
    fout << st;
    fin.close();
    fout.close();
    return 0;
}