Cod sursa(job #2832681)

Utilizator AswVwsACamburu Luca AswVwsA Data 14 ianuarie 2022 09:38:34
Problema GFact Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <fstream>
#include <climits>
#include <vector>
using namespace std;

ifstream cin("gfact.in");
ofstream cout("gfact.out");
int fact(int x, int div)
{
    int ans = 0;
    for (; x >= div; x /= div)
        ans += x / div;
    return ans;
}

vector <pair <int, int> > help;
int main()
{
    int p, q;
    cin >> p >> q;
    int d = 2;
    while (d * d <= p)
    {
        if (p % d == 0)
        {
            int aux = 0;
            while (p % d == 0)
            {
                aux++;
                p /= d;
            }
            int pwr = aux * q;
            help.push_back({d, pwr});
        }
        d++;
    }
    if (p > 1)
        help.push_back({p, q});
    int st = 1, dr = INT_MAX - 1, sol = -1;
    while (st <= dr)
    {
        int med = ((st + dr) >> 1);
        bool ok = 0;
        for (int i = 0; i < help.size(); i++)
        {
            int val = fact(med, help[i].first);
            if (val < help[i].second)
            {
                ok = 1;
                break;
            }
        }
        if (!ok)
        {
            sol = med;
            dr = med - 1;
        }
        else st = med + 1;
    }
    cout << sol;
}