Cod sursa(job #3169673)

Utilizator Botnaru_VictorBotnaru Victor Botnaru_Victor Data 15 noiembrie 2023 19:12:34
Problema GFact Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <bits/stdc++.h>

using namespace std;

typedef pair<int,int> pii;
#define x first
#define y second
#define int long long

#ifndef LOCAL
    const string name = "gfact";
    ifstream in(name+".in");
    ofstream out(name+".out");
    #define cin in
    #define cout out
#endif // FIO

const int INF = 1e18+6;

int p,q;
vector<pii> primes;

bool ok(int x,int y,int nr)
{
    int cnt=0, me=x;
    while(me<=nr)
    {
        cnt+=nr/me;
        me*=x;
    }
    if(cnt<y*q) return 0;
    return 1;
}
int32_t main()
{
    cin>>p>>q;
    int a=p;
    int i=2;
    while(i*i<=a)
    {
        int j=0;
        while(a%i==0)
        {
            j++;
            a/=i;

        }
        if(j>0)
        {
            primes.push_back({i,j});
        }
        i++;
        //cout<<"here "<<i<<' '<<a<<'\n';
    }

    if(a>0)
    {
        primes.push_back({a,1});
    }
    int ans=0;
    for(auto e:primes)
    {
        int st=0,dr=INF;
        int mid=(st+dr)/2;
        while(st!=dr)
        {
            if(ok(e.x,e.y,mid))dr=mid;
            else st=mid+1;
            mid=(st+dr)/2;
        }
        ans=max(ans, mid);
    }
    cout<<ans<<'\n';

    return 0;
}