Pagini recente » Cod sursa (job #1766282) | Cod sursa (job #172748) | Cod sursa (job #2711229) | Cod sursa (job #2770503) | Cod sursa (job #3330534)
#include <fstream>
#include <iostream>
#include <vector>
#define fi first
#define se second
using namespace std;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
typedef long long ll;
vector <pair<ll,ll>> divs;
bool subexp(ll val,ll prim,ll maxi)
{
ll res=0;
ll prod=1;
while(prod<=val/prim)
{
prod*=prim;
res+=val/prod;
if(maxi<=res)
return false;
}
return true;
}
bool check(ll val)
{
//val! divizibil p^q, deci prim^(exp*q) deci exp(val!,prim)>=exp*q
for(auto p:divs)
if(subexp(val,p.fi,p.se))
return false;
return true;
}
int main()
{
ll d=2;
ll p,q;
fin>>p>>q;
while(p>1)
{
int exp=0;
while(p%d==0)
exp++,p/=d;
if(exp)
divs.push_back({d,exp*q});
d++;
if(d*d>p)
d=p;
}
ll st=0,dr=1e16,mid,ans=0;
while(st<=dr)
{
mid=(st+dr)/2;
if(check(mid))
{
ans=mid;
dr=mid-1;
}
else
st=mid+1;
}
fout<<ans;
return 0;
}