Pagini recente » Cod sursa (job #1641549) | Cod sursa (job #907144) | Cod sursa (job #281248) | Cod sursa (job #1355144) | Cod sursa (job #1334752)
#include <cstdio>
#include <vector>
using namespace std;
long long left,right,mid,p,q,i,exp,c,f;
vector < pair < long long , long long > > t;
long long query(long long p,long long e)
{
long long cu=e,to=0;
while (cu<=p)
{
to+=p/cu;
cu*=e;
}
return to;
}
bool check(long long step)
{
long long i;
for (i=0;i<t.size();++i)
if (query(step,t[i].first)<t[i].second)
return false;
return true;
}
int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
scanf("%lld%lld",&p,&q);
for (i=2,c=p;i*i<=p;++i)
{
exp=0;
while (c%i==0)
{
c/=i;
++exp;
}
if (exp) t.push_back(make_pair(i,q*exp));
}
if (c>1) t.push_back(make_pair(c,q));
left=1;right=1000000000000000000;
while (left<=right)
{
mid=(left+right)>>1;
if (check(mid))
{
f=mid;
right=mid-1;
} else left=mid+1;
}
printf("%lld\n",f);
return 0;
}