Pagini recente » Cod sursa (job #1099572) | Cod sursa (job #386523) | Cod sursa (job #2720086) | Cod sursa (job #1339022) | Cod sursa (job #3169669)
#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;
}