Pagini recente » Cod sursa (job #1861534) | Cod sursa (job #3259890) | Cod sursa (job #1557815) | Cod sursa (job #2697506) | Cod sursa (job #419347)
Cod sursa(job #419347)
#include<iostream>
#include<string>
using namespace std;
#define LL long long
int p[100],q[100],k;
int P,Q;
int fine(LL B)
{
for(int i=1;i<=k;++i)
{
LL deimp=p[i],cate=0;
while(B/deimp)
{
cate+=(B/deimp);
deimp*=p[i];
}
if(cate<q[i]*Q) return 0;
}
return 1;
}
int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
scanf("%d %d",&P,&Q);
int nr=P;
for(int i=2;(LL)i*i<=P && nr>1;++i)
if(nr%i==0)
{
p[++k]=i;
while(nr%i==0)
{
++q[k];
nr/=i;
}
}
if(nr>1)
{
p[++k]=nr;
q[k]=1;
}
LL st=1,dr=9000000000000000LL;
while(st<dr)
{
LL mij=(st+dr)/2;
if(fine(mij)) dr=mij;
else st=mij+1;
}
printf("%I64d",st);
return 0;
}