Cod sursa(job #3169669)

Utilizator RobertAcAcatrinei Robert-Marian RobertAc Data 15 noiembrie 2023 19:04:47
Problema GFact Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <bits/stdc++.h>
#ifdef LOCAL
#define in cin
#define out cout
#endif
#define int int64_t
using namespace std;

#ifndef LOCAL
ifstream in("gfact.in");
ofstream out("gfact.out");
#endif

int countt(int maxx,vector<int> bases)
{
    int minn = -1;
    for(auto i:bases)
    {
        int cnt=0;
        int base1=i;
        while(base1<=maxx)
        {
            cnt+=maxx/base1;
            base1*=i;
        }
        if(minn==-1)
        {
            minn=cnt;
        }
        else
        {
            minn=min(minn,cnt);
        }
    }
    return minn;
}


signed main()
{
    int p,q;in>>p>>q;
    int st = 1, dr = 1e16;
    vector<int> primes;
    int cp = p;
    for(int i=2;i*i<=p;i++)
    {
        if(cp%i==0)
        {
            primes.push_back(i);
        }
        while(cp%i==0)
        {
            cp/=i;
        }
    }
    if(cp>1)primes.push_back(cp);
    while (st<dr)
    {
        int mid=(st+dr)/2;
        //cerr<<st<<' '<<dr<<'\n';
        //cerr<<mid<<' '<<p<<' '<<countt(mid,p)<<'\n';
        if(countt(mid,primes)>=q)
        {
            dr=mid;
        }
        else
        {
            st=mid+1;
        }
    }
    out<<st;
}