Cod sursa(job #3174303)

Utilizator Alexbora13Bora Ioan Alexandru Alexbora13 Data 24 noiembrie 2023 17:03:45
Problema GFact Scor 25
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <bits/stdc++.h>

using namespace std;

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

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

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

int ok(int x)
{
    for(pair <int,int>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));

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